0

我有2個字符串令我非常沮喪。 他們包含,單獨,相同的文字,但是當比較他們Java不說。相同的字符串是不同的

正文爲「LaCoruña」。一個字符串通過Google Geocoder返回,另一個字符串由我進行硬編碼。

我已經試過equals()返回假,equalsIgnoreCase()返回假,返回假,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使用某種編碼(「LaCoruña」包含ñ字符),它與其他硬編碼字符串不同。

請給我一些幫助

在此先感謝。

+1

根據ASCII,這些是根本不同的字符串。第一個開始「La」,第二個開始「A」。 (一個是西班牙語,另一個是加利西亞語。) – 2014-12-02 23:33:45

+0

什麼是「 - 」? – realUser404 2014-12-02 23:37:45

+0

@OliverCharlesworth哇!你很棒,但它是從錯誤日誌中複製錯字。抱歉!我已經更新了我的問題。其實內容是不同的,但長度是一樣的。 – Alberto 2014-12-02 23:42:09

回答

2

印刷陣列的不同之處在於-61,-79對-47,-127作爲「ñ」的表示。負數顯然是打印解釋爲有符號數字的字節時得到的結果(第一位是符號位)。將它們作爲無符號數處理,因爲應該處理字符表示中的字節,它們是195,177與209,129,十進制,C3,B1與D1,十六進制81。前者是LATIN SMALL LETTER N WITH TILDE U + 00F1的UTF-8表示。後者在這裏沒有任何意義,因爲它會是西裏爾字母。

因此,顯然您從Google獲得的第一個字符串是正確的UTF-8編碼。另一個,顯然是硬編碼的,簡直是錯誤的。從給定的數據中,不能推斷出錯誤來自哪裏。

+0

感謝您指點我正確的方向。你是完全正確的。谷歌的字符串是好的,但硬編碼沒有。 **我的項目中的所有源代碼文件都有windows-1252編碼**。我甚至不知道爲什麼。將(逐個)更改爲UTF-8後,數組變得相同,我可以將它們成功比較。謝謝。 – Alberto 2014-12-04 20:18:46

相關問題