【发布时间】:2013-01-07 09:53:37
【问题描述】:
我正在寻找一种方法来比较两个 Java 字符串,它们在字典上是等效的,但在字节级别上并不相同。
更准确地说,取以下文件名“baaaé.png”,在字节级别它可以用两种不同的方式表示:
[98, 97, 97, 97, -61, -87, 46, 112, 110, 103] --> "é" 编码为 2 个字节
[98, 97, 97, 97, 101, -52, -127, 46, 112, 110, 103] --> "é" 编码为 3 个字节
byte[] ch = {98, 97, 97, 97, -61, -87, 46, 112, 110, 103};
byte[] ff = {98, 97, 97, 97, 101, -52, -127, 46, 112, 110, 103};
String st = new String(ch,"UTF-8");
String st2 = new String(ff,"UTF-8");
System.out.println(st);
System.out.println(st2);
System.out.println(st.equals(st2));
将生成以下输出:
baaaé.png
baaaé.png
false
有没有办法进行比较以使 equals 方法返回 true ?
【问题讨论】:
-
这里的渲染不一样。
-
@dystroy 这使我们重新考虑“字典上等价的”语句:)
-
@dystroy (强烈)首选的网络规范化形式是 NFC。显然,您的网络浏览器采用了简单的快捷方式,并且仅支持 NFC,不支持 NFD。对于它的价值,我的也是如此。显然,网络浏览器不会费心实施 NFD。但是,我可以将这两个示例复制并粘贴到一个同时支持 NFC 和 NFD 的不同应用程序中,并且它们的显示方式完全相同。