【发布时间】:2015-01-31 09:10:31
【问题描述】:
我有 2 个字符串让我很沮丧。 显然,它们包含相同的文本,但在比较它们时,Java 不会这么说。
文字是“拉科鲁尼亚”。一个字符串是通过 Google Geocoder 返回的,另一个是我硬编码的。
我试过equals()返回false,equalsIgnoreCase()返回false,contains()返回false,compareTo()不返回0(等于0)。
然后我将字符串转储到字节数组中,每个都使用getBytes("UTF-8") 方法。
同样,equals() 返回 false,Arrays.compare(array1, array2) 也返回 false。
Arrays.compare() 当每个数组的长度不同或相同位置的值不同时返回 false。所以我打印了两个数组和......惊喜!内容不一样。
像这样:
Array1 [76, 97, 32, 67, 111, 114, 117, -61, -79, 97]
Array2 [76, 97, 32, 67, 111, 114, 117, -47, -127, 97]
问题是为什么会发生这种情况以及如何使它们相等,以便我可以成功比较。 我的猜测是 Google 使用了某种不同于其他硬编码字符串的编码(“La Coruña”包含 ñ char)。
请给我一些帮助
提前致谢。
【问题讨论】:
-
根据 ASCII,这些是根本不同的字符串。第一个开始“La”,第二个开始“A”。 (一个是西班牙人,另一个是加利西亚人。)
-
@OliverCharlesworth 哇!你是对的,但这是从错误日志中复制的拼写错误。对不起!我已经更新了我的问题。其实内容不同,但长度是一样的。
-
仍然是“La”与“LA”恕我直言。虽然不知道“ñ”
-
@realUser404 是的,谢谢。这是一个错字。我已经花了好几个小时来处理这个问题,现在我看不到那些小细节。我不想浪费你的时间,对不起。我使用了在线十进制到文本转换器,区别仅在于 ñ 部分。
标签: java android character-encoding string-comparison non-ascii-characters