使用OpenCSV解析包含Unicode字符的CSV文件

我正在尝试在NetBeans 6.0.1中使用OpenCSV解析.csv文件。 我的文件包含一些Unicode字符。 当我在输出中写入时,角色以其他forms出现,如(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。 是什么生成这个文件开始?

之后,它相对简单 – 您需要创建一个包含在InputStreamReaderFileInputStream ,而不仅仅是FileReader 。 ( FileReader始终使用系统的默认编码。)指定创建InputStreamReader时要使用的编码,如果选择了正确的编码,则一切都应该开始工作。

请注意,您不需要使用OpenCSV来检查 – 您可以自己阅读文件的文本并将其全部打印出来。 我不确定我是否相信System.out能够处理非ASCII字符 – 您可能想要找到一种不同的检查字符串的方法,例如将字符的各个值打印为整数(最好是hex) )然后将它们与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块来关闭真实代码中的文件。)