Невозможно преобразовать и сохранить строку UTF-8 в ANSI в java - PullRequest
0 голосов
/ 25 мая 2020

Вот мой код. Мне нужно записать строку в консоль в 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();
}

1 Ответ

0 голосов
/ 25 мая 2020

Во-первых, 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 (...) уже выполняет преобразование кодировки при записи в файл, поэтому вы можете просто дать ему исходный message.

...