Java 使用ä;解析CSVöü;

Java 使用ä;解析CSVöü;,java,csv,Java,Csv,我在从csv中读取ö、ü和ä时遇到问题。程序应该使用OpenCSV库读取csv文件,然后将其解析为客户列表(每行是一个客户),最后将其写入另一个.csv文件,添加其他数据 public CSVConverter(String fileNameIn, String fileNameOut, int header){ try { this.fileNameIn = fileNameIn; this.fileNameOut = fileNameOut;

我在从csv中读取ö、ü和ä时遇到问题。程序应该使用OpenCSV库读取csv文件,然后将其解析为客户列表(每行是一个客户),最后将其写入另一个.csv文件,添加其他数据

public CSVConverter(String fileNameIn, String fileNameOut, int header){
    try {
        this.fileNameIn = fileNameIn;
        this.fileNameOut = fileNameOut;
        this.header = header;
        reader=new CSVReader(new InputStreamReader(new FileInputStream(this.fileNameIn), "UTF-8"), ';');
        writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(this.fileNameOut), "UTF-8"));
    } catch (FileNotFoundException ex) {
        System.out.println("File not found!");
    } catch (UnsupportedEncodingException ex) {
        Logger.getLogger(CSVConverter.class.getName()).log(Level.SEVERE, null, ex);
    }
}


public void readTXT(){
    try {
        kundenListe = (ArrayList<String[]>) reader.readAll();
    } catch (IOException ex) {
        Logger.getLogger(CSVConverter.class.getName()).log(Level.SEVERE, null, ex);
    }

}

public void writeCSV(){
    this.parseCustomerList();
    for(Kunde customer : this.customerList){
        try {
            writer.write(customer.toString());
            System.out.println(customer.toString());
        } catch (IOException ex) {
            Logger.getLogger(CSVConverter.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}

private Kunde parseCustomer(String[] row){
    Kunde tempCust = new Kunde();
        tempCust.setKDNR(row[0].trim());
        tempCust.setName_1(row[1].trim());
        tempCust.setName_2(row[2].trim());
        //...

        return tempCust;
}
private void parseCustomerList(){
    for(String[] kunde : this.kundenListe){
            this.customerList.add(this.parseCustomer(kunde));
    }
}
public CSVConverter(字符串fileNameIn、字符串fileNameOut、int头){
试一试{
this.fileNameIn=fileNameIn;
this.fileNameOut=fileNameOut;
this.header=头;
reader=new CSVReader(new InputStreamReader(new FileInputStream(this.fileNameIn),“UTF-8”),“;”);
writer=newbufferedwriter(newoutputstreamwriter(newfileoutputstream(this.fileNameOut),“UTF-8”);
}捕获(FileNotFoundException ex){
System.out.println(“未找到文件!”);
}捕获(不支持DencodingException ex){
Logger.getLogger(CSVConverter.class.getName()).log(Level.SEVERE,null,ex);
}
}
public void readTXT(){
试一试{
kundenListe=(ArrayList)reader.readAll();
}捕获(IOEX异常){
Logger.getLogger(CSVConverter.class.getName()).log(Level.SEVERE,null,ex);
}
}
公共无效writeCSV(){
this.parseCustomerList();
for(Kunde客户:this.customerList){
试一试{
writer.write(customer.toString());
System.out.println(customer.toString());
}捕获(IOEX异常){
Logger.getLogger(CSVConverter.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
private Kunde parseCustomer(字符串[]行){
Kunde tempCust=新Kunde();
tempCust.setKDNR(行[0].trim());
tempCust.setName_1(行[1].trim());
tempCust.setName_2(行[2].trim());
//...
返回临时客户;
}
私有void parseCustomerList(){
for(字符串[]kunde:this.kundenListe){
this.customerList.add(this.parseCustomer(kunde));
}
}
当我试图通过
System.out.println(customer.toString())从文件中写入一行时它也没有打印,只是一个矩形。但是一个正常的
系统.out.println(“öäü”)工作正常


提前非常感谢

显然,您正在读取cvs文件,而不是使用
UTF-8
编码

检查使用了哪个字符集,并在读取时使用相同的字符集(或替换字符集),而不是
UTF-8


如果不知道,或者它是从不同编码的系统生成的,您可以使用来确定。请注意,如果没有使用非ASCII字符,此API可能会返回null。

您是否使用正确的字符集读取文件?请显示您的类
Kundle
我已使用UTF-8字符集从access导出csv文件M。Kunde只是一个带有属性、getter和setter的类,没有别的。我已经使用utf-8字符集从access导出了csv文件。请使用任何高级文本编辑器验证字符编码一次。我怀疑输入CSV包含非UTF编码的字符。基本上,当编码的字节表示与用于读取的字符集所期望的不同时,就会发生这种类型的问题。谢谢!我发现了错误!:-)