该java.net.URI
构造函数接受大多数非ASCII字符,但不接受表意空间(0x3000处)。ctor失败并显示java.net.URISyntaxException: Illegal character in path ...
所以我的问题是:
URI
ctor0x3000
不接受但接受其他非ASCII字符?请注意,第一个示例包含表意空间而不是常规空间。
问题在于表意空间。
这是允许使用非ASCII字符的代码:
} else if ((c > 128)
&& !Character.isSpaceChar(c)
&& !Character.isISOControl(c)) {
// Allow unescaped but visible non-US-ASCII chars
return p + 1;
}
如您所见,它禁止“笨拙”的不可见字符。
另请参见URI
类javadocs,它指定URI的每个组件中允许(由类!)使用的字符。
为什么?
这可能是一种安全措施。
还有哪些其他不允许的内容?
根据各个Character
谓词方法,为空白字符或控制字符...。(有关详细说明,请参见Character
javadocs。)
你还应该注意,这是一个偏差从URI规范。URI规范规定仅在以下情况下才允许使用非ASCII字符:
我的理解是,URI.toASCIIString()
如果您有“异常”java.net.URI
对象,则该方法将解决此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句