2014-02-03 3 views
0

Я сделал небольшую программу java в netbeans, которая читает текстовый файл. Когда я запускаю программу в своих сетях, все идет хорошо. Поэтому я создал исполняемую банку своей программы, но когда я запускаю эту банку, я получаю проводные символы, когда программа читает текстовый файл.jar java program encoded

Например: Я получаю «CÃ © leste», но это должен быть Céleste.

Вот мой код, чтобы прочитать файл:

private void readFWFile(File file){ 
    try { 
     FileReader fr = new FileReader(file); 
     BufferedReader br = new BufferedReader(fr); 
     String ligne; 
     while((ligne = br.readLine()) != null) { 
      System.out.println(ligne); 
     } 

     fr.close(); 
    } catch (IOException ex) { 
     Logger.getLogger(FWFileReader.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 
+0

может вы бывший я получаю «CÃ © Лест», но она должна быть Селест в виду? – Kick

+0

Похоже, что NetBeans поддерживает Unicode, но в вашей среде командной строки этого нет. Проверьте, может ли ваша операционная система быть переключена в Unicode-совместимый (или, по крайней мере, режим Unicode-толерантный). – keshlam

+0

http://stackoverflow.com/questions/696626/java-filereader-encoding-issue – HectorLector

ответ

2

Класс FileReader использует «кодировку символов по умолчанию платформы», чтобы декодировать байты в файле в символы. Кажется, что ваш файл закодирован в UTF-8, а кодировка по умолчанию - что-то еще в вашей системе.

Вы можете прочитать файл в определенной кодировке, используя InputStreamReader:

Reader fr = new InputStreamReader(new FileInputStream(file), "UTF-8"); 
1

Этот вид продукции вызвано несоответствием где - ваш файл в кодировке UTF-8, но консоль, где вы печатаете данные ожидает одно- байт, например Windows-1252.

Вам необходимо (а) убедиться, что вы прочитали файл как UTF-8 и (b) убедитесь, что вы пишете на консоль, используя ожидаемую им кодировку.

FileReader всегда использует кодировку по умолчанию для платформы при чтении файлов. Если это UTF-8, то

  • код Java считывает файл в UTF-8 и видит Céleste
  • вы затем распечатать эти данные как UTF-8
    • в NetBeans консоль явно ожидает UTF -8 и правильно отображает данные
    • Внешний вид NetBeans консоль ожидает однобайтную кодировку и отображает неправильный рендеринг.

Или, если ваша кодировка по умолчанию является один байтами один то

  • код Java считывает файл в виде единым кодирования байт и видит Céleste
  • вы затем распечатать эти данные как то же кодирование
    • NetBeans рассматривает байты, которые вы написали как UTF-8, и отображает Céleste
    • вне NetBeans вы видите неправильные данные, которые вы первоначально читали.

Используйте InputStreamReader с FileInputStream, чтобы убедиться, что вы читать данные в правильном кодировании, и убедитесь, что при печати данных в консоли вы так используете кодировку, которая ожидает консоль.

+2

Сильные подозрения не дают ответа. – Rainbolt

+0

@John true, я немного изменил ситуацию. –

+1

Этот ответ действительно дает лучшее объяснение (после редактирования). Вы всегда можете обратиться к ответу Джони, если хотите, чтобы код был написан для вас. – Rainbolt