示例代码:
java.net.URI.create("http://测试.com").getHost(); // return null
new java.net.URL("http://测试.com").getHost(); // return "测试.com"相关文件:
在URI的javadoc中,有人提到它支持:
其他不在US字符集中的Unicode字符不是控制字符(根据Character.isISOControl方法),也不是空格字符(根据Character.isSpaceChar方法)(偏离RFC 2396,该字符仅限于US-ASCII)。
众所周知,
抽象地说,每个URL都是一个URI,但并不是每个URI都是URL。
因此,上述行为似乎不符合预期。
发布于 2022-05-07 07:09:26
你是对的。此时Java并不正确地支持IRIs。
您发现的RFE表明,在Java 6中尝试实现IRIs。出于兼容性原因,它被回滚:
这一变化整合到野马b67作为CCC 6348622的一部分,造成不兼容问题,即6380332。我们需要重新检查术语“基于注册表”在java.net.URI规范中的使用情况,并记录不兼容问题。 将URI类回滚到Tiger版本,原因是兼容性原因。
最近,David Fuchs做了一些工作来分析这个问题,并提出了一些原型代码,但这似乎从2019年以来就没有进展了:
https://stackoverflow.com/questions/72150152
复制相似问题