我从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("öäü");
可以正常工作。
非常感谢你!
答案 0 :(得分:0)
显然是cvs文件,您正在阅读,而不是使用UTF-8
进行编码。
检查使用哪个字符集并在阅读时使用相同(或替换字符集),而不是UTF-8
如果不知道它或者它是从具有不同编码的各种系统生成的,您可以使用this encoding detector library来确定。请注意,如果没有使用非ASCII字符,此API可能会返回null。