如何在Java中使用真正的挪威字符文件?

时间:2016-07-08 05:28:28

标签: java string unicode encoding

以下是我用来读取文件的代码。

InputStreamReader iReader = new InputStreamReader(new FileInputStream("myrecords.txt"),"ISO-8859-1");
BufferedReader bReader = new BufferedReader(iReader);

public static List<String> bufferedReaderToStringList(BufferedReader bReader) throws IOException {
    List<String> stringList = new ArrayList<String>();
    String text;
    while ((text = bReader.readLine()) != null) {
        stringList.add(text);
    }
    bReader.close();
    return stringList;
}

当我从字符串中获取数据并打印时,所有字符都会失真。在我的Putty屏幕上,甚至我将它保存在数据库中它仍然是扭曲的。任何人都可以帮助解决问题

任何人都可以指导我做错的地方吗?

Dolvenh�yda is distorted one. It is Norwegian character. 
Dolvenhøyda is correct one. 

2 个答案:

答案 0 :(得分:1)

您是如何将文本打印到控制台的?可能是控制台假设utf-8中的字符,而实际上是iso-...

&#39;转换&#39;打印的字符串可能会解决问题:Charset.forName("UTF-8").encode(myString)

答案 1 :(得分:1)

InputStreamReader将InputStream(二进制数据)与其编码(此处为ISO-8859-1)一起包装以读取文本,在java内部将其保存为Unicode。编码必须正确。

InputStreamReader iReader = new InputStreamReader(
        new FileInputStream("myrecords.xml"), "ISO-8859-1");

BufferedReader只处理(假定正确的)文本。

BufferedReader bReader = new BufferedReader(iReader);

因此只有InputStreamReader可能是错误的。您可以使用XML文件进行检查。

默认情况下,XML为UTF-8,由<?xml ... encoding=... ?>中的编码覆盖。在某些情况下,这可能很复杂,但点击XML将很容易显示其正确性。

现在,如果编码正确,Reader,String等应该是正确的。

但是输出到控制台(System.out)会使用操作系统编码,这可能会破坏给定的文本。

再次输出到文件,需要指定文件内容的所需编码。还需要保持<?xml encoding=... ?>中的编码正确。