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

标签 java utf-8 ansi

这是我的代码。我必须以 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,不好。然后:

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

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

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

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

关于java - 无法在java中将UTF-8字符串转换并保存为ANSI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62001838/

相关文章:

c - 如何在 ANSI C 中使用 strsignal 和 WCOREDUMP?

delphi - winapinameA 与 winapinameW - Unicode 与 Ansi - Delphi XE2

java - 如何在基于spring java的配置中设置ehcache.xml的位置?

python - 将不在 7 位 ASCII 中的字母翻译成 ASCII(如 ń 到 n 和 ± 到 a)

java - 为什么我要检查一个 Runnable,它的线程不为空​​?

Python 2.7、变音符号、UTF-8 和列表

html - URL 中的 Unicode 字符

JavaScript blob 编码为 UTF-8 而不是 ANSI

java - 回答这些评论问题

java.lang.NoClassDefFoundError : org/springframework/boot/Banner$Mode when using Hystrix