我正在尝试在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);
}
答案 0 :(得分:35)
首先,您需要知道文件的编码方式,例如UTF-8或UTF-16。什么生成这个文件开始?
之后,它相对简单 - 您需要创建一个FileInputStream
包裹在InputStreamReader
而不仅仅是FileReader
。 (FileReader
始终使用系统的默认编码。)指定创建InputStreamReader
时要使用的编码,如果选择了正确的编码,则一切都应该开始工作。
请注意,您不需要使用OpenCSV来检查 - 您可以自己阅读文件的文本并将其全部打印出来。我不确定我是否相信System.out
能够处理非ASCII字符 - 您可能想要找到一种不同的检查字符串的方法,例如将字符的各个值打印为整数(最好在十六进制中)然后将它们与charts at 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块来关闭真实代码中的文件。)