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

Cannot convert and save UTF-8 string to ANSI in java

这是我的代码。我必须以 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() returns 默认字符集中字符串的字节,通常是 UTF-16。其次,new String(bytes[], string) 将字节解释为提供的字符集中的字符串,它不会转换它们。所以:

new String(message.getBytes(), "UTF-8")

尝试将 UTF-16 字符串读取为 UTF-8,错误。那么:

new String(utfString.getBytes(), "WINDOWS-1251")

尝试将结果字符串读取为 WINDOWS-1251,同样糟糕。

我确定此时您的字符串已被破坏。

您只需调用 getBytes(Charset) 即可获取所需字符集中的字符串字节。但在你的情况下你甚至不需要这样做,因为你的 writeToFile(...) 方法在写入文件时已经进行了字符集转换,所以你可以只给它原始的 message.