在java中无法将UTF-8字符串转换并保存为ANSI。

问题描述 投票:0回答:1

这是我的代码。我必须用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();
}
java utf-8 ansi
1个回答
0
投票

首先, 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.

© www.soinside.com 2019 - 2024. All rights reserved.