2017-11-01 3 views
0

したがって、私は文字列を持っています:CIUDAD DE M É XICOはソース(SQL Serverデータベース) 。私はこの文字列を読んで、同じ文字列をjavaのutf-8形式に変換する必要があります。 だから私の入力= CIUDAD DEメキシコ(ラテン1) 私の出力= CIUDAD DEメキシコ(UTF-8)iso-8859-1で特殊文字を読み取り、同じ文字のutf-8値を取得します

私は

System.out.println(new String(myStr.getBytes("ISO-8859-1"),"UTF-8")); 

をやってみました。しかし、これは以来、私にCIUDAD DE MXICOを返します。文字Éはutf8-1で何か違うものに変換されます

何か助けていただければ幸いです。

+2

「UTF-8」の代わりにUTF8-1としてエンコードを使用している理由を教えてください。 – arjunsv3691

+2

JDBCドライバはデータベースのエンコーディングを処理するので、そこから文字列を取得するだけです。 'String s = resultSet.getString(1)'。同様に、 'System.out'はすでに出力のエンコーディングを知っているはずです。 'System.out.println(s)'メモリ内の文字列 's'が(* debugger *で見られるように)正しくない場合は、JDBCドライバのオプションを確認してください。印刷された出力が正しくない場合は、 '-Dfile.encoding = UTF-8'コマンドラインオプションを使用して、デフォルトの文字セットを変更してください。 – Andreas

+0

あなたのコードは実行されません: 'UnsupportedEncodingException:UTF8-1' – Andreas

答えて

1

@アンドレアスは、すでに必要な情報をほとんど提供していました。

はい、私たちは皆、文字エンコードが厄介な小さな悪魔になる可能性があることを知っています。

まず、文字列にはエンコーディングがありません。文字列には正しい文字が含まれているか、そうではありません。文字列とバイト配列またはバイトストリームの間で変換を行う場合は、エンコーディングが必要です。

新しい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であることを確認し、文字列を渡すだけです。
関連する問題