如何将List <string []>值从UTF-8转换为String?</string []>

时间:2014-07-27 19:24:54

标签: java string utf-8 character-encoding

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

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()方法。 我该怎么办。任何想法都会非常有帮助。提前谢谢。

2 个答案:

答案 0 :(得分:3)

问题是您使用的FileReader仅支持&#34;默认&#34;字符集:

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");

答案 1 :(得分:1)

要将UTF-8字节解码为Java String,您可以执行以下操作(取自this

Charset UTF8_CHARSET = Charset.forName("UTF-8");

String decodeUTF8(byte[] bytes) {
    return new String(bytes, UTF8_CHARSET);
}

一旦将数据读入String,就无法控制编码了。 Java在内部将字符串存储为UTF-16。如果您正在读取的CSV文件是使用UTF-8编码编写的,则应将其作为UTF-8读入字节数组。然后再使用上述方法将字节数组解码为Java String。现在,一旦你有完整的String,你可以考虑根据分隔符或其他参数将它拆分为字符串列表(我没有关于你的数据的线索)。