2011-08-10 3 views
1

は私がすることによってUTF-8のファイルを読み込む何ですか?にInputStreamReaderによって返されるテキストの文字セット(文字セットCS、中のInputStream)

私のコンピュータ上のEclipseでは、デフォルトの文字セットとして「GBK」が使用されています。

+1

なぜあなたはこれを求めていますか?それを読んだり、読み込んだ文字を表示するのに問題がありますか? – BalusC

答えて

3

技術的には、InputStreamReaderに指示したとおり、ファイルはUTF-8の文字セットを使用して読み込まれています。ファイル内容の基礎となるバイトは、UTF-8を使用して解釈されています。 readLine()メソッドは、文字をJavaの独自のUTF-16文字セットに内部的に格納するStringを返します。

その後に起こることは、このStringで行っていることに完全に依存しています。文字セットを指定せずにWriterを使用してファイルに書き戻す場合、プラットフォームのデフォルトが使用されます。 stdoutに表示している場合は、実行時環境(コマンドコンソール?IDEなど)に依存するstdoutのデフォルトの文字セットが使用されます。データベースに保存する場合は、JDBCドライバの設定やDBテーブルのエンコーディングに依存します。 Etcetera。

明らかに、EclipseのコンソールのstdoutにSystem.out.println()で印刷しています。その場合、GBK文字セットが文字の表示に使用されます。これは、GBKでカバーされていないもともと読み込まれたUTF-8文字を改変することになります。 UTF-8をテキストファイルのエンコーディングとして使用するようにEclipseを設定する必要があります。これは、ウィンドウ>環境設定>一般>ワークスペース>テキストファイルエンコーディングで行うことができます。

0

これは16ビットのUnicodeであるJavaの文字として表されます。

+0

UTF-8にはすべてのUnicodeを格納するのに問題はないので、1つのUTF-8文字は2つの16ビット「char単位」になる可能性があることに注意してください。 java 'char'はUnicode文字を保持できません。それは、醜い代理人とすべての文字列を必要とします。 – tchrist

1

Javaの文字列はすべてrepresented as UTF-16です。文字を読み込むと、指定したエンコーディングがUTF-16に変換されます。書き出すときは、別のエンコーディングを暗黙的または明示的に書き込むように選択し、その文字はUTF-16から選択したものに変換されます。

関連する問題