以下の簡単なテスト失敗している:文字列UTF8エンコードの問題
与えるassertEquals(myStringComingFromTheDB, "£");
:
Expected :£
Actual :£
をなぜこれが起こっている私は特にそれが実際の文字列のエンコーディングで考えると、理解していません(2番目の引数として指定されたもの)が間違っています。 JavaファイルはUTF8として保存されます。
次のコード:
System.out.println(bytesToHex(myStringComingFromTheDB.getBytes()));
System.out.println(bytesToHex("£".getBytes()));
出力:
C2A3
C382C2A3
誰が、なぜ私を説明できますか?
ありがとうございます。
アップデート:私は更新2 Windows 7の下
を働いている:それは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: 16進エディタでjavaファイルを開き、ポンド記号が正しく「C2A3」として保存されます。
assertEquals(expected, actual)
ので、あなたの場合にはDBからの文字列はOKですが、(あなたはすでに気づいて)Javaクラスからの1ではありません。
ありがとうございます、@PiotrekDe。私はctrl + c&ctrl + vについても同じことを考えましたが、私はキーボードで手動で入力しましたが、私はまだ問題に直面しています。私はWindows 7を使用しています。この問題は大変奇妙で、それは私を驚かせています! – satoshi
あなたのファイルは本当にUTF8でエンコードされていませんか?いくつかのIDEで作業しますか? Eclipseの場合は、Windows>環境設定>一般>コンテンツタイプから新しいファイルのデフォルトエンコードを設定できます。このスレッドを参照してください:http://www.eclipse.org/forums/index.php?t=msg&goto=543800& –
私はIntelliJ Ideaで作業しています。エンコーディングはUTF8です。私はすでにオプションをチェックしており、それはUTF8です。また、下のバーに書かれています。ポンド記号を選択すると、「エンコード(自動検出):UTF-8」と表示されます。 – satoshi