Java 如何转换列表<;字符串[]>;从UTF-8到字符串的值?

Java 如何转换列表<;字符串[]>;从UTF-8到字符串的值?,java,string,utf-8,character-encoding,Java,String,Utf 8,Character Encoding,我想将一些希腊文本从UTF-8转换为字符串,因为Java无法识别它们。然后,我想将它们填充到JTable中。所以我使用列表来帮助我。下面是代码片段: String[][] rowData; List<String[]> myEntries; //... try { this.fileReader = new FileReader("D:\\Book1.csv"); this.reader = new CSVReader(fileReader, ';')

我想将一些希腊文本从UTF-8转换为字符串,因为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);
    }
//...
String[][]行数据;
列出我的中心;
//...
试一试{
this.fileReader=newfilereader(“D:\\Book1.csv”);
this.reader=新的CSVReader(文件读取器,;);
myEntries=reader.readAll();
//这里我想把UTF-8中的每个值都转换成字符串
转换自UTF8(myEntries);/???
this.rowData=myEntries.toArray(新字符串[0][]);
}捕获(FileNotFoundException ex){
Logger.getLogger(VJTable.class.getName()).log(Level.SEVERE,null,ex);
}捕获(IOEX异常){
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;
}
utf8的公共字符串转换器(列表s){
String out=null;
试一试{
用于(字符串字符串值:s){
out=新字符串(s.getBytes(“ISO-8859-1”),“UTF-8”);
}
}捕获(java.io.UnsupportedEncodingException){
返回null;
}
返回;
}
但我无法继续,因为列表中没有getBytes()方法。
我该怎么办。任何想法都会很有帮助。提前谢谢。

要将UTF-8字节解码为Java字符串,可以执行以下操作(摘自)


一旦您将数据读入字符串,您就不再控制编码了。Java在内部将字符串存储为UTF-16。如果正在读取的CSV文件是使用UTF-8编码写入的,则应将其作为UTF-8读取到字节数组中。然后再次使用上述方法将字节数组解码为Java字符串。现在,一旦您拥有完整的字符串,您可能会考虑根据分隔符或其他参数将其拆分为字符串列表(我不知道您拥有的数据)。

要将UTF-8字节解码为Java字符串,您可以这样做(取自)


一旦将数据读入字符串,您就无法再控制编码。Java在内部将字符串存储为UTF-16。如果正在读取的CSV文件是使用UTF-8编码写入的,则应将其作为UTF-8读取到字节数组中。然后再次使用上述方法将字节数组解码为Java字符串。现在,一旦您拥有完整的字符串,您可能会考虑根据分隔符或其他参数将其拆分为字符串列表(我不知道您拥有的数据)。

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

this.fileReader = new FileReader("D:\\Book1.csv");
javadoc for在这方面非常清楚:

此类的构造函数假定默认字符 编码和默认字节缓冲区大小是合适的。指明 您可以自己创建这些值,然后在 FileInputStream

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

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

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

this.fileReader = new FileReader("D:\\Book1.csv");
javadoc for在这方面非常清楚:

此类的构造函数假定默认字符 编码和默认字节缓冲区大小是合适的。指明 您可以自己创建这些值,然后在 FileInputStream

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

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


那么,我必须将UTF-8转换为UTF-16吗?而且,Java实现确实支持UTF-8。是什么让您相信Java无法识别它们?任何错误、错误字符?错误字符..它返回矩形而不是字母…您用来查看的工具可能不支持UTF-8。像NetBeans工具或JTable工具这样的工具?我应该如何让它识别UTF-8?那么,我必须将UTF-8转换为UTF-16吗?而且,Java实现确实支持UTF-8。是什么让您相信Java无法识别它们?任何错误、错误字符?错误字符..它返回矩形而不是字母…您用来查看的工具可能不支持UTF-8。像NetBeans工具或JTable工具这样的工具?我应该如何让它识别UTF-8?虽然这会起作用,但使用InputStreamReader通常是更好的选择,尤其是对于较大的内容(例如整个csv文件)。是的,我没有谈到如何读取字节数组,你的观点确实填补了空白。在一篇评论中也提到了答案:因为1.7版你可以使用常量
标准字符集。UTF_8
,它与第一行的功能相同。虽然这会起作用,但使用InputStreamReader通常是更好的选择,尤其是对于较大的内容(如整个csv文件)。是的,我没有谈到如何读入字节数组,你的观点确实填补了空白。在一篇评论中也提到了答案:因为1.7你可以使用常量
标准字符集。UTF_8
,它的作用与第一行相同。你在哪里显示?该字体/应用程序是否支持希腊字符字形?您确定源数据编码为utf-8吗?是的,我确定。我使用
fileReader.getEncoding()
方法返回编码。UTF8,它说。我正在JTable上显示,但我不知道字体是否支持希腊语。我怎么看呢?getEncoding只返回正在使用的内容。它不是从内容本身派生的。您是否有导致问题的字符的字节值,以及您期望的字符是什么?你能告诉我怎样才能从myEntries列表中得到它吗?@VassilisDe你看错了。这个答案是正确的。您需要使用正确的输入流读取器。看,你在哪里展示?该字体/应用程序是否支持希腊字符字形?你是cer吗