我想将一些希腊文本从UTF-8转换为String,因为Java无法识别它们。然后,我想将它们填充到JTable中。因此,我使用列表来帮助我。下面是代码片段:

String[][] rowData;
List<String[]> myEntries;
//...
try {
        this.fileReader = new FileReader("D:\\Book1.csv");
        this.reader = new CSVReader(fileReader, ';');
        myEntries = reader.readAll();

        //here I want to convert every value from UTF-8 to String
        convertFromUTF8(myEntries); //???

        this.rowData = myEntries.toArray(new String[0][]);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(VJTable.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(VJTable.class.getName()).log(Level.SEVERE, null, ex);
    }
//...


我创建了一个方法

public String convertFromUTF8(List<String[]> s) {
    String out = null;
    try {
        for(String stringValues : s){
            out = new String(s.getBytes("ISO-8859-1"), "UTF-8");
        }
    } catch (java.io.UnsupportedEncodingException e) {
        return null;
    }
    return out;
}


但我无法继续,因为List没有getBytes()方法。
我该怎么办。任何想法都将非常有帮助。先感谢您。

最佳答案

问题是您使用的FileReader仅支持“默认”字符集:

this.fileReader = new FileReader("D:\\Book1.csv");


FileReader的javadoc在以下方面非常清楚:


  此类的构造函数假定默认字符
  编码和默认的字节缓冲区大小是合适的。指定
  您自己可以使用这些值,并在其中构造一个InputStreamReader
  FileInputStream。


获取具有指定字符集的Reader的适当方法如下:

this.fileStream = new FileInputStream("D:\\Book1.csv");
this.fileReader = new InputStreamReader(fileStream, "utf-8");

10-08 00:35