下面這個簡單的測試失敗:字符串UTF8編碼問題
assertEquals(myStringComingFromTheDB, "£");
,並提供:
Expected :£
Actual :£
我不明白爲什麼會這樣,特別是考慮到是實際字符串的編碼(指定爲第二個參數的那個)是錯誤的。該java文件保存爲UTF8。
下面的代碼:
System.out.println(bytesToHex(myStringComingFromTheDB.getBytes()));
System.out.println(bytesToHex("£".getBytes()));
輸出:
C2A3
C382C2A3
任何人都可以解釋我爲什麼?
謝謝。
更新:我在Windows 7
更新2的工作:它不涉及JUnit的,下面簡單的例子:
byte[] bytes = "£".getBytes();
for(byte b : bytes)
{
System.out.println(Integer.toHexString(b));
}
輸出:
ffffffc3
ffffff82
ffffffc2
ffffffa3
更新3: 我在IntelliJ Idea中工作,我已經檢查了選項,編碼是UTF8。此外,它寫在底部欄中,當我選擇並右鍵單擊井號時,它會顯示「編碼(自動檢測):UTF-8」。
更新4: 用十六進制編輯器打開java文件,井號正確保存爲「C2A3」。
謝謝您的回答,@PiotrekDe。我以爲ctrl + c和ctrl + v是一樣的,但我用鍵盤手動輸入,但仍然面臨問題。我正在使用Windows 7.這個問題很奇怪,它嚇壞了我! – satoshi 2012-02-25 15:43:03
所以也許你的文件不是真正的UTF8編碼?你使用一些IDE嗎?如果是Eclipse,則可以從Windows>首選項>常規>內容類型)爲新文件設置默認編碼。看到這個線程:http://www.eclipse.org/forums/index.php?t=msg&goto=543800& – 2012-02-25 15:47:16
我在IntelliJ IDEA的工作,編碼是UTF8。我已經檢查過這些選項,它是UTF8。此外,它寫在底部欄,當我選擇英鎊英鎊符號它說:「編碼(自動檢測):UTF-8」。 – satoshi 2012-02-25 15:51:01