使用ä,ö,ü解析CSV

时间:2014-05-20 11:06:46

标签: java csv

我从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));
    }
}

当我试图通过System.out.println(customer.toString());从文件中写出一行时,它也没有打印,只是一个矩形。但正常的System.out.println("öäü");可以正常工作。

非常感谢你!

1 个答案:

答案 0 :(得分:0)

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

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

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