我正在尝试将unicode转换为iso_8859_1。
String myString = "\u00E9checs";
byte[] bytesOfString = myString.getBytes();
String encoded_String = new String(bytesOfString, StandardCharsets.ISO_8859_1);
System.out.println(encoded_String);
输出:
échecs
到目前为止还不错,但当我尝试转换保存在文件中的相同文本时,它并不是转换为打印,而是在这里附上代码,以便从文件中读取并执行转换。
String path = "st.txt"; //where st.txt contains only one line i.e. \u00E9checs
FileInputStream inputStream = null;
Scanner sc = null;
try {
inputStream = new FileInputStream(path);
sc = new Scanner(inputStream);
while (sc.hasNextLine()) {
byte[] bytesOfString = sc.nextLine().getBytes();
String encoded_String = new String(bytesOfString, StandardCharsets.ISO_8859_1);
System.out.println(encoded_String);
}
if (sc.ioException() != null) {
throw sc.ioException();
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (sc != null) {
sc.close();
}
}
输出:
\u00E9checs
注意:这是一个测试代码,因此我在文件中使用一行代码;我需要在一个大文件上应用相同的过程,因为我使用scanner类来节省内存利用率。
有没有人能告诉我,当unicode直接在java字符串变量中声明时,如何获得与我相同的文件文本结果?
提前感谢您,期待您的早日回复。
1条答案
按热度按时间htzpubme1#
这就是问题所在:
因此:
一个文件中大约有8859-1个字节
扫描仪在假定它们是unicode的情况下读取它们
然后将unicode数据转换为一些utf-8字节
然后把字节转换成unicode,假装它们是8859-1
您应该使用需要8859-1输入的扫描仪:
然后nextline将进行正确的转换;不需要更多的代码杂耍。