Java - файл кодировки - PullRequest
       12

Java - файл кодировки

2 голосов
/ 20 октября 2011

У меня есть приложение, которое обрабатывает некоторый текст, а затем сохраняет его в файл.

Когда я запускаю его из IDE NetBeans, System.out и PrintWriter работают корректно и отображаются символы не ACSII/ сохранено правильно.Но, если я запускаю JAR из командной строки Windows 7 (в данном случае используется кодировка cp1250 (центральноевропейская) ), сохраненный файл будет поврежден.

Я пыталсяпоместить UTF-8 в PrintWriter конструктор, но это не помогло ... И это не может повлиять на System.out, который будет поврежден даже после этого.

Почему этоработая в IDE, а не в cmd.exe?
Я бы понял, что System.out имеет некоторые проблемы, но почему это также влияет на выходной файл?

Как я могу исправить эту проблему?

1 Ответ

0 голосов
/ 10 февраля 2013

У меня просто была такая же проблема.Фактическая причина этого в том, что когда ваш код запускается в среде NetBeans, NetBeans автоматически устанавливает свойства системы.

Вы можете видеть, что при запуске кода с помощью NetBeans приведенный ниже код, вероятно, выводит «UTF-8».Но когда вы запустите его с помощью cmd, вы обязательно увидите «cp1256».

System.getProperty("file.encoding"); 

Вы должны заметить, что при использовании setProperty изменится вывод функции getProperty, это не будет иметь никакого эффекта.на входах / выходах.(поскольку все они установлены до вызова основной функции.)

Имея в виду этот фон, когда вы хотите читать из файлов и записывать в них, лучше использовать коды ниже:

    File f = new File(sourcePath);

Для чтения:

InputStreamReader isr = new InputStreamReader(
    new FileInputStream(f), Charset.forName("UTF-8"));

и для записи (я не проверял это):

OutputStreamWriter osw = new OutputStreamWriter(
    new FileOutputStream(f), Charset.forName("UTF-8"));

основное отличие состоит в том, что эти классы получают требуемый Charset в своих конструкторах,но такие классы, как FileWrite и PrintWrite - нет.Я надеюсь, что это работает для вас.

...