3

私はスペイン語のファイルを持っているので、次のような文字でいっぱいです:

 á é í ó ú ñ Ñ Á É Í Ó Ú 

私はファイルを読まなければならないので、これを行います:

fr = new FileReader(ficheroEntrada);
BufferedReader rEntrada = new BufferedReader(fr);

String linea = rEntrada.readLine();
if (linea == null) {
logger.error("ERROR: Empty file.");
return null;
} 
String delimitador = "[;]";
String[] tokens = null;

List<String> token = new ArrayList<String>();
while ((linea = rEntrada.readLine()) != null) {
    // Some parsing specific to my file. 
    tokens = linea.split(delimitador);
    token.add(tokens[0]);
    token.add(tokens[1]);
}
logger.info("List of tokens: " + token);
return token;

トークンのリストを読むと、すべての特殊文字がなくなり、次の種類の文字に置き換えられています。

Ó = Ó
Ñ = Ñ

等々...

何が起こっていますか?文字セットに問題があったことは一度もありませんでした(文字セットの問題だと思います)。このコンピューターのせいですか?私に何ができる?

追加のアドバイスをいただければ幸いです、私は学んでいます!ありがとうございました!

4

5 に答える 5

5

関連する文字エンコードを指定する必要があります。

BufferedReader rEntrada  = new BufferedReader(
    new InputStreamReader(new FileInputStream(fr), "UTF-8"));
于 2012-11-21T15:00:13.300 に答える
4
于 2012-11-21T15:42:28.720 に答える
2

私の経験では、テキストファイルはWesternエンコーディング(ISO-8859-1)に基づいて読み書きする必要があります。

BufferedReader rEntrada = new BufferedReader(new InputStreamReader(new FileInputStream(fr)、 "ISO-8859-1"));

于 2012-11-21T15:07:45.537 に答える
2

デフォルトのエンコーディングが間違っています。おそらくUTF8またはlatin1を読む必要があります。ストリームのエンコーディングを設定するには、このスニペットを参照してください。Java、デフォルトのエンコーディングも参照してください

public class Program {

    public static void main(String... args)  {

        if (args.length != 2) {
            return ;
        }

        try {
            Reader reader = new InputStreamReader(
                        new FileInputStream(args[0]),"UTF-8");
            BufferedReader fin = new BufferedReader(reader);
            Writer writer = new OutputStreamWriter(
                       new FileOutputStream(args[1]), "UTF-8");
            BufferedWriter fout = new BufferedWriter(writer);
            String s;
            while ((s=fin.readLine())!=null) {
                fout.write(s);
                fout.newLine();
            }

            //Remember to call close. 
            //calling close on a BufferedReader/BufferedWriter 
            // will automatically call close on its underlying stream 
            fin.close();
            fout.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
于 2012-11-21T14:59:23.317 に答える
0

他の答えはあなたに正しい方向を提供します。そのGuavaFiles.newReader(File、Charset)ヘルパーメソッドで追加したかっただけで、そのようなBufferedReaderの作成が非常に読みやすくなります(しゃれを許してください)。

BufferedReader rEntrada = Files.newReader(new File(ficheroEntrada), Charsets.UTF_8);
于 2012-11-21T15:07:50.133 に答える