这是我的代码。我必须用UTF-8将字符串写到控制台,但用ANSI保存字符串。当我打开文件时,它是UTF-8的。我应该怎么做?
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));
String message = bufferedReader.readLine();
bufferedReader.close();
String utfString = new String(message.getBytes(), "UTF-8");
String ansiMessage = new String(utfString.getBytes(), "WINDOWS-1251");
writeToFile(ansiMessage, "ANSI.txt", "WINDOWS-1251");
private static void writeToFile(String string, String path, String enc) throws IOException {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), enc));
writer.write(string);
writer.close();
}
首先, getBytes()
返回字符串的默认字符集字节数,通常是UTF-16。第二种。new String(bytes[], string)
在提供的字符集中,它将字节解释为字符串,而不是转换它们。所以。
new String(message.getBytes(), "UTF-8")
尝试把UTF-16的字符串读成UTF-8,不好。然后:将一个UTF-16的字符串读成UTF-8,不好。
new String(utfString.getBytes(), "WINDOWS-1251")
读取结果是WINDOWS -1251, 同样不好.
我相信此时你的字符串已经被破坏了。
你可以直接调用 getBytes(Charset)
来获取字符串中你想要的字符集的字节数。但在你的例子中,你甚至不需要这样做,因为你的writeToFile(...)方法已经在写入文件时进行了字符集转换,所以你可以只给它原始的 message
.