以下是我用来读取文件的代码。
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.
答案 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=... ?>
中的编码正确。