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
.
这是我的代码。我必须以 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
.