Вывод как кодировка UTF-8 в java

У меня возникла проблема с выходным файлом из программы, использующей eclipse. я установите мое eclipse в UTF-8 и

 System.getProperty("file.encoding") 

я получаю UTF-8.i, запустил мою prog через eclipse run-option, а вывод (текстовый файл) закодирован в UTF-8., но когда я сжал исходный код в файл jar, выходной файл показывает ошибку в каком-либо алфавите, таком как Ã.what с этим diff при рунизации прога в eclipse и файле frm jar? и мне нужно указать вывод, который должен быть закодирован в utf-8 в моем исходном коде? Справка pls.

help from @dacwe действительно дал желаемый результат. но могу ли я знать, как я могу запустить исполняемый файл .jar за пределами командной строки? Как можно -Dfile.encoding = UTF-8

@dacwe: я попытался изменить исходный код на

 BufferedWriter bout  = new java.io.BufferedWriter(new java.io.OutputStreamWriter(
                new java.io.FileOutputStream(filename), "UTF-8"));

но вывод по-прежнему не закодирован правильно. Все, что я пропустил здесь?

Ответ 1

После некоторого серьезного обсуждения в @Dave G ответьте!

Использование java -Dfile.encoding=UTF-8 -jar your-jar-file.jar работает.

Обновление вашего кода с помощью @Dave G (и ваше редактирование) должно работать.

  • Вы действительно переупаковали свою банку?
  • Вы называете close() на bout? (например, возможно, ваш файл не обновлен)

Вот полный пример, который может вас заинтересовать:

public static void main(String... args) throws Exception {
    PrintWriter out = new PrintWriter(new File("hello.txt"), "UTF-8");
    out.print("written in utf-8");
    out.close();
}

Ответ 2

Когда вы запускаете из JAR файла, вы задаете свойство file.encoding -Dfile.encoding? Если нет, вы можете либо

a) явно открыть поток с помощью этой кодировки. для этого вам нужно будет создать OutputStream и затем обернуть это в OutputStreamWriter, явно указывая кодировку символов.

или

b) установите свойство как первое в своем основном методе, используя System.setProperty( "file.endcoding" ); Забастовкa >

note @dacwe отметил, что я забыл... исправил свой ответ.