16

NetBeans6.0.1のOpenCSVで.csvファイルを解析しようとしています。私のファイルにはUnicode文字が含まれています。出力に書き込むと、文字は(HJ1'-E /;)のような他の形式で表示されます。このファイルをメモ帳で開くと、問題ないように見えます。

私が使用したコード:

CSVReader reader=new CSVReader(new FileReader("d:\\a.csv"),',','\'',1);
    String[] line;
    while((line=reader.readNext())!=null){
        StringBuilder stb=new StringBuilder(400);
        for(int i=0;i<line.length;i++){
            stb.append(line[i]);
            stb.append(";");
        }
        System.out.println( stb);
    }
4

1 に答える 1

37

まず、UTF-8やUTF-16など、ファイルがどのエンコーディングであるかを知る必要があります。そもそもこのファイルを生成しているのは何ですか?

その後、それは比較的簡単です-あなたはただの代わりにFileInputStreamラップされたものを作成する必要があります。(常にシステムのデフォルトのエンコーディングを使用します。)を作成するときに使用するエンコーディングを指定します。適切なエンコーディングを選択した場合は、すべてが機能し始めるはずです。InputStreamReaderFileReaderFileReaderInputStreamReader

これを確認するためにOpenCSVを使用する必要はないことに注意してください。ファイルのテキストを自分で読んで、すべて印刷するだけで済みます。ただし、ASCII以外の文字を処理できるかどうかはSystem.outわかりません。文字の個々の値を整数(できれば16進数)として出力してから、文字列を調べる別の方法を見つけたい場合があります。それらをunicode.orgのチャートと比較します。一方、正しいエンコーディングを試して、何が始まるかを確認することもできます...

編集:わかりました。UTF-8を使用している場合:

CSVReader reader=new CSVReader(
    new InputStreamReader(new FileInputStream("d:\\a.csv"), "UTF-8"), 
    ',', '\'', 1);
String[] line;
while ((line = reader.readNext()) != null) {
    StringBuilder stb = new StringBuilder(400);
    for (int i = 0; i < line.length; i++) {
         stb.append(line[i]);
         stb.append(";");
    }
    System.out.println(stb);
}

(実際のコードでファイルを閉じるためのtry / finalブロックがあることを願っています。)

于 2009-11-08T08:08:38.007 に答える