Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用OpenCSV解析包含Unicode字符的CSV文件_Java_Netbeans_Csv_Opencsv - Fatal编程技术网

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

Java 使用OpenCSV解析包含Unicode字符的CSV文件,java,netbeans,csv,opencsv,Java,Netbeans,Csv,Opencsv,我正在尝试用NetBeans 6.0.1解析一个.csv文件。我的文件包含一些Unicode字符。当我在输出中写入它时,字符以其他形式出现,如(HJ1'-E/;)。当我在记事本中打开此文件时,它看起来正常 我使用的代码是: CSVReader reader=new CSVReader(new FileReader("d:\\a.csv"),',','\'',1); String[] line; while((line=reader.readNext())!=null){

我正在尝试用NetBeans 6.0.1解析一个.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);
    }
CSVReader reader=新的CSVReader(新的文件读取器(“d:\\a.csv”),,,,,,,,,,,\”,1);
字符串[]行;
而((line=reader.readNext())!=null){
StringBuilder stb=新的StringBuilder(400);

对于(int i=0;i首先,您需要知道文件的编码方式,例如UTF-8或UTF-16。首先生成此文件的是什么

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

请注意,您不需要使用OpenCSV来检查这一点-您可以自己读取文件的文本并将其全部打印出来。我不确定我是否相信
System.out
能够处理非ASCII字符-您可能希望找到另一种检查字符串的方法,例如在我检查字符串时打印出字符的各个值ntegers(最好是十六进制),然后将它们与进行比较。另一方面,您可以尝试正确的编码,看看从

编辑:好的,如果您使用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);
}
CSVReader reader=新的CSVReader(
新的InputStreamReader(新文件InputStream(“d:\\a.csv”),“UTF-8”),
',', '\'', 1);
字符串[]行;
而((line=reader.readNext())!=null){
StringBuilder stb=新的StringBuilder(400);
对于(int i=0;i

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

我得到
构造函数CSVReader(InputStreamReader,char)未定义solution@Code_Mode:我的代码不尝试调用这样的构造函数-它尝试调用
CSVReader(InputStreamReader,char,char,int)
。这对您有用吗?即使是这样,也会出现同样的错误。我使用的是OpenCSV4.1,它的构造函数没有这个错误constructor@Code_Mode看看文档和它,它应该在那里,但不赞成。考虑使用CSVRealBuube代替。