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

mey*_*pro 16 java csv netbeans opencsv

我正在尝试使用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);
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 36

首先,您需要知道文件的编码方式,例如UTF-8或UTF-16.什么生成这个文件开始?

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

请注意,您不需要使用OpenCSV来检查 - 您可以自己阅读文件的文本并将其全部打印出来.我不确定我是否相信System.out能够处理非ASCII字符 - 您可能想要找到一种不同的方法来检查字符串,例如将字符的各个值打印为整数(最好是十六进制),然后将它们与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);
}
Run Code Online (Sandbox Code Playgroud)

(我希望你有一个try/finally块来关闭真实代码中的文件.)