1

次の方法で UTF-8 ファイルを読み取ります。

br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), Charset.forName("UTF-8")));

Stringを呼び出した後に返される文字セットは何br.readLine()ですか?

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

4

3 に答える 3

3

技術的には、ファイルは UTF-8 の文字セットを使用して読み取られるように指示されInputStreamReaderています。ファイル コンテンツの基になるバイトは、UTF-8 を使用して解釈されています。このreadLine()メソッドは、StringJava 独自の 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で実行できます。

于 2011-08-10T02:30:19.673 に答える
1

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

于 2011-08-10T02:37:22.067 に答える
0

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

于 2011-08-10T02:31:00.677 に答える