16

我正在尝试在 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);
    }
4

1 回答 1

37

首先你需要知道你的文件是什么编码的,比如 UTF-8 或者 UTF-16。从什么开始生成这个文件?

在那之后,它就相对简单了——你需要创建一个FileInputStream包装在 anInputStreamReader而不是仅仅一个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);
}

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

于 2009-11-08T08:08:38.007 回答