gpt4 book ai didi

java - 相同的字符串不同

转载 作者:行者123 更新时间:2023-12-02 05:11:57 25 4
gpt4 key购买 nike

我有 2 个字符串让我非常沮丧。显然,它们包含相同的文本,但在比较它们时,Java 并没有这么说。

文本是“拉科鲁尼亚”。一个字符串是通过 Google Geocoder 返回的,另一个是我硬编码的。

我尝试过返回 false 的 equals() 、返回 false 的 equalsIgnoreCase() 、返回 false 的 contains()compareTo() 不返回 0(即 0 相等)。

然后我将字符串转储到字节数组中,每个数组都使用 getBytes("UTF-8") 方法。同样,equals() 返回 false,Arrays.compare(array1, array2) 也返回 false。

Arrays.compare() 当每个数组的长度不同或同一位置的值不同时返回 false。所以我打印了两个数组......惊喜!内容不同。像这样:
数组1 [76, 97, 32, 67, 111, 114, 117, -61, -79, 97]
数组2 [76, 97, 32, 67, 111, 114, 117, -47, -127, 97]

问题是为什么会发生这种情况以及如何使它们相等以便我可以成功进行比较。我的猜测是 Google 正在使用某种与其他硬编码字符串不同的编码(“La Coruña”包含 ñ char)。

请给我一些帮助

提前致谢。

最佳答案

打印数组的差异是 -61、-79 与 -47、-127 作为“ñ”的表示。负数显然是当您打印解释为有符号数的字节时得到的结果(第一位是符号位)。将它们视为无符号,因为应该将字符表示中的字节视为,它们是十进制的 195、177 与 209、129,十六进制的 C3、B1 与 D1、81。前者是 LATIN SMALL LETTER N WITH TILDE 的 UTF-8 表示形式U+00F1。后者在这里作为 UTF-8 没有任何意义,因为它是一个西里尔字母。

因此,第一个字符串(显然是您从 Google 获得的)是正确的 UTF-8 编码的。另一个显然是硬编码的,只是错误的。从给定的数据中,无法推断出错误来自何处。

关于java - 相同的字符串不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27260985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com