@アンドレアスは、すでに必要な情報をほとんど提供していました。
はい、私たちは皆、文字エンコードが厄介な小さな悪魔になる可能性があることを知っています。
まず、文字列にはエンコーディングがありません。文字列には正しい文字が含まれているか、そうではありません。文字列とバイト配列またはバイトストリームの間で変換を行う場合は、エンコーディングが必要です。
新しいString(myStr.getBytes( "ISO-8859-1")、 "UTF-8")
エンコーディングの便利な変換奇妙ではなく、何かを:あなたは、文字列を取りますmyStr
を文字のISO-8859-1エンコーディングを含むバイト配列に変換します。
次に、これらのバイトをISO-8859-1でエンコードされていないが、UTF-8であることを宣言して文字列に読み込みます。異なるエンコーディングでバイトを作成したので、それは間違っています。
次に、結果のSystem.out.println()
を実行します。
何が問題になりますか?
myStr
の値は正しいですか?例えばそれを見てください。デバッガで。正しい位置にÉ文字(10進値201/16進0xC1)が表示されます。そうでない場合は、データベースドライバの設定を見てください。
- コンソール出力で文字が正しく表示されていますか?試してください
System.out.println("CIUDAD DE M\u00c1XICO");
。アクセント付きのEで正しい名前を付ける必要があります。そうでない場合は、プログラムの障害ではありませんが、Javaとコンソールウィンドウでは文字エンコーディングが一致しません。これはWindowsコマンドプロンプトcmd.exe
でよく見られます。例えば出力を見てください。 Eclipseコンソールウィンドウで、他のコンソールを無視します。
ここで、UTF-8でエンコードされた結果が必要ですか?
- 文字列?文字列にはエンコーディングや文字だけがないので、何もする必要はありません。
- ファイルはありますか? UTF-8をエンコーディングとして開きます。
- バイト配列ですか? UTF-8をエンコーディングとして作成します。
- データベース列?ドライバの設定がOKであることを確認し、文字列を渡すだけです。
「UTF-8」の代わりにUTF8-1としてエンコードを使用している理由を教えてください。 – arjunsv3691
JDBCドライバはデータベースのエンコーディングを処理するので、そこから文字列を取得するだけです。 'String s = resultSet.getString(1)'。同様に、 'System.out'はすでに出力のエンコーディングを知っているはずです。 'System.out.println(s)'メモリ内の文字列 's'が(* debugger *で見られるように)正しくない場合は、JDBCドライバのオプションを確認してください。印刷された出力が正しくない場合は、 '-Dfile.encoding = UTF-8'コマンドラインオプションを使用して、デフォルトの文字セットを変更してください。 – Andreas
あなたのコードは実行されません: 'UnsupportedEncodingException:UTF8-1' – Andreas