次の方法で UTF-8 ファイルを読み取ります。
br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), Charset.forName("UTF-8")));
String
を呼び出した後に返される文字セットは何br.readLine()
ですか?
私のコンピューターの Eclipse は、デフォルトの文字セットとして「GBK」を使用します。
次の方法で UTF-8 ファイルを読み取ります。
br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), Charset.forName("UTF-8")));
String
を呼び出した後に返される文字セットは何br.readLine()
ですか?
私のコンピューターの Eclipse は、デフォルトの文字セットとして「GBK」を使用します。
技術的には、ファイルは UTF-8 の文字セットを使用して読み取られるように指示されInputStreamReader
ています。ファイル コンテンツの基になるバイトは、UTF-8 を使用して解釈されています。このreadLine()
メソッドは、String
Java 独自の UTF-16 文字セットで内部的に文字を格納する を返します。
その後何が起こるかは、これで何をしているかに完全に依存していますString
。文字セットを指定せずに を使用してファイルに書き戻す場合はWriter
、プラットフォームのデフォルトが使用されます。標準出力に表示する場合は、ランタイム環境 (コマンド コンソール? IDE? など) に依存する標準出力のデフォルトの文字セットが使用されます。データベースに保存する場合は、JDBC ドライバーの構成や DB テーブルのエンコードに依存します。など。
どうやら、Eclipseのコンソールで標準出力に出力しているようですSystem.out.println()
。その場合、文字の表示には GBK 文字セットが使用されます。これにより、GBK でカバーされていない、最初に読み取られた UTF-8 文字が不正な形式になります。UTF-8 をテキスト ファイルのエンコーディングとして使用するように Eclipse を構成する必要があります。これは、Window > Preferences > General > Workspace > Text file encodingで実行できます。
Java のすべての文字列はUTF-16 として表されます。文字を読み取ると、指定したエンコーディングを使用して文字が UTF-16 に変換されます。それらを書き出すときは、暗黙的または明示的に別のエンコーディングを選択して書き込むと、文字は UTF-16 から選択したものに変換されます。
これは、16 ビット Unicode である Java char として表されます。