Выходной поток кодировки Java UTF8 не работает - PullRequest
0 голосов
/ 28 января 2019

Мне нужно написать программу, способную записывать данные UTF-8 в файл.

Я нашел примеры в интернете, однако я не могу перейти к желаемому результату.

Код:

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class UTF8WriterDemo {

    public static void main(String[] args) {
        Writer out = null;
        try {
            out = new BufferedWriter(
                    new OutputStreamWriter(new FileOutputStream("c://java//temp.txt"), "UTF-8"));


            String text = "This texáát will be added to File !!";

            out.write(text);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

Все работает успешно, но в конце я вижу, что специальные символы не отображаются должным образом: Этот текст будет добавлен в Файл !!

Я попробовал несколько примеров из Интернета с тем же результатом.

Я использую код Visual Studio.

В чем может быть проблема, пожалуйста?

Спасибо

1 Ответ

0 голосов
/ 28 января 2019

Ваш код правильный.Возможно, у вас уже есть файл с именем temp.txt , и поэтому Java записывает текст в существующий файл (заменяя предыдущий контент).Проблема может быть в кодировке, которую вы уже установили в своем файле.

Другими словами, вы не можете (или, по крайней мере, не должны) записывать текст UTF-8 в файл, например, с кодировкой WINDOWS-1250, иначе вы получите точный результат, как вы описали.

Если у вас нет этого файла, Java автоматически создаст файл с кодировкой UTF-8.

Возможные решения:

  1. Изменить кодировку вашего текущего файла (обычно вы можете открыть его в любом текстовом редакторе, используйте Сохранить как и затем укажите кодировку как UTF-8 .
  2. Удалите этот файл, и Java создаст его автоматически с правильной кодировкой.

Кстати,Вы должны использовать StandardCharsets класс вместо String charsetName, чтобы избежать UnsupportedEncodingException:

new OutputStreamWriter(new FileOutputStream("temp.txt"), StandardCharsets.UTF_8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...