源代码如下:(a-zA-Z全部替换为x)
String url = "xxxxx://xx730xxxxxxx005.xxxx.xxx:8443/xxx/xxxxxxxxx.xxxx#xxxxxx=xxxxxxx2&&xxxxxxxxx=1388782204000&&xxxxxxx=1388785804000&&xxxxx=xxxxxxxxxxx='xxx-xx730xxxxx10'%20xxx%20xxxxxxxx='__xxx__xxx_xxx_xxxxxxx_xxxx_xxxxxxxxx_#2_xxx-xx__xxx_xxx_xxxxxxx_______xxxx'"
System.out.println(url2.charAt(215)); -> result #
URI.create(url2); // illegal character exception
我不明白为什么如果它是一个有效的URL字符,我会在索引215处获取“#”中的非法字符。
答案 0 :(得分:2)
URI的片段标识符组件允许间接
通过引用主要来识别次要资源 资源和其他识别信息。 [...] 一个片段 标识符组件由数字符号的存在表示 (“#”)字符,以URI结尾终止。
格式为
fragment = *( pchar / "/" / "?" )
其中pchar
是
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
其中unreserved
,pct-encoded
和sub-delims
是
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
换句话说,#
在第一个#
之后不是有效字符,表示片段的开头。它需要编码。使用%23
。