2

アクセント (フランス語名) があるため、Unicode でエンコードされた .txt ファイルからデータを抽出しようとしています。以下は私のコードの一部です。文字列 postalCode の出力には、奇妙な小さな正方形が含まれています (squareHsquare1square)。私の疑いでは、コンテンツを ASCII として扱うプログラムに問題があると思われます。誰かが私を正しい方向に向けてください。ありがとう!

Scanner in = new Scanner(new FileReader("postal_codes.txt"));
currentLine = in.nextLine();

//take first 6 char --> store as variable
postalCode = currentLine.substring(0, 5);
4

4 に答える 4

3

エンコードの問題のようです。「Unicodeでエンコードされた」とは、「UTF-8でエンコードされた」ことを意味すると思います。これを試して:

Scanner in = new Scanner(
    new InputStreamReader(new FileInputStream("postal_codes.txt"), "UTF-8"));

は、プラットフォームのデフォルトのFileReaderエンコーディングを自動的に使用します。多くの場合、これは UTF-8 ではありません。

于 2013-03-20T08:22:27.287 に答える
3

のjavadocを読むとFileReader、次のように書かれています(強調は私のものです):

このクラスのコンストラクターは、既定の文字エンコーディングと既定のバイト バッファー サイズが適切であることを前提としています。これらの値を自分で指定するには、 FileInputStream で InputStreamReader を構築します

つまり、次を使用する必要があります。

new Scanner(new InputStreamReader(
     new FileInputStream("postal_codes.txt"), StandardCharsets.UTF_8));
于 2013-03-20T08:24:34.003 に答える
1

グアバ、メソッドを使用できます:

Files.readLines(File file Charset charset) : List<String>

パッケージの

com.google.common.io.Files;
于 2013-03-20T08:25:42.007 に答える
0

これを試すことができます:

BufferedReader in = new BufferedReader(new FileReader("postal_codes.txt", "UTF-8")));
String content = in.readLine();
postalCode = content.substring(0, 5);
于 2013-03-20T08:22:14.997 に答える