NetBeans 6.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);
}
まず、UTF-8やUTF-16など、ファイルがどのエンコーディングであるかを知る必要があります。そもそもこのファイルを生成しているのは何ですか?
その後は、比較的簡単です。FileInputStream
だけでなく、InputStreamReader
でラップされたFileReader
を作成する必要があります。 (FileReader
は常にシステムのデフォルトのエンコーディングを使用します。)InputStreamReader
を作成するときに使用するエンコーディングを指定します。適切なエンコーディングを選択すると、すべてが機能し始めます。
これを確認するためにOpenCSVを使用する必要はないことに注意してください。ファイルのテキストを自分で読んですべて印刷するだけで済みます。信頼できるかどうかわかりませんSystem.out
ただし、非ASCII文字を処理できるようにするために-文字の個々の値を整数(できれば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/finallyブロックがあることを願っています。)