は私がすることによってUTF-8のファイルを読み込む何ですか?にInputStreamReaderによって返されるテキストの文字セット(文字セットCS、中のInputStream)
私のコンピュータ上のEclipseでは、デフォルトの文字セットとして「GBK」が使用されています。
は私がすることによってUTF-8のファイルを読み込む何ですか?にInputStreamReaderによって返されるテキストの文字セット(文字セットCS、中のInputStream)
私のコンピュータ上のEclipseでは、デフォルトの文字セットとして「GBK」が使用されています。
技術的には、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を設定する必要があります。これは、ウィンドウ>環境設定>一般>ワークスペース>テキストファイルエンコーディングで行うことができます。
これは16ビットのUnicodeであるJavaの文字として表されます。
UTF-8にはすべてのUnicodeを格納するのに問題はないので、1つのUTF-8文字は2つの16ビット「char単位」になる可能性があることに注意してください。 java 'char'はUnicode文字を保持できません。それは、醜い代理人とすべての文字列を必要とします。 – tchrist
Javaの文字列はすべてrepresented as UTF-16です。文字を読み込むと、指定したエンコーディングがUTF-16に変換されます。書き出すときは、別のエンコーディングを暗黙的または明示的に書き込むように選択し、その文字はUTF-16から選択したものに変換されます。
なぜあなたはこれを求めていますか?それを読んだり、読み込んだ文字を表示するのに問題がありますか? – BalusC