2015-03-26 6 views
0

Я пытаюсь создать текстовый файл с кодировкой ISO-8859-15 из метода Java:Java Latin1 текстовый файл с кодировкой

public void createLatin1EncodedTextFile(File latin1File, Integer numberOfLines) throws UnsupportedEncodingException, 
    FileNotFoundException { 

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(latin1File), "8859_1")); 
    try { 
    for (int i = 0; i < numberOfLines; i++) { 
     bw.write(new String(generateRandomString().getBytes(), "ISO-8859-15")); 
    } 
    } 
    catch (IOException e) { 
    e.printStackTrace(); 
    } 
    finally { 
    try { 
     if (!bw.equals(null)) { 
     bw.close(); 
     } 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

метод generateRandomString() генерирует случайную последовательность символов. Метод работает нормально, но когда я его открываю с помощью блокнота ++, он говорит, что файл закодирован в UTF-8.

+0

Для '.getBytes()' вам нужно указать, какую кодировку следует использовать. см. [getBytes (String charset)] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#getBytes (java.lang.String)) – SubOptimal

+0

У вас на самом деле нет -ASCII 7-битные символы в вашем документе? Если это только ASCII, то Notepad ++ сообщит «UTF-8 без спецификации» –

ответ

2

Вы делаете гораздо больше работы, чем вам нужно. Кодирование файла независимо от кодировки вы передаете OutputStreamWriter:

try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
     new FileOutputStream(latin1File), "ISO-8859-15"))) { 
    for (int i = 0; i < numberOfLines; i++) { 
     bw.write(generateRandomString()); 
    } 
} 

Все дело писателя в том, что он принимает символы (или строки) и берет на себя задачу кодирования их.

Тот факт, что ваш параметр имеет имя latin1File, заставил меня задаться вопросом, действительно ли вы хотите создать файл ISO-8859-15.

+0

Все еще, почему он указывает, что созданный файл закодирован в UTF-8, когда я открываю его с помощью блокнота ++. – FanFan

+0

Если текст ограничен, может быть, NotePad ++ берет файл для UTF-8, который является надмножеством ASCII, как ISO-8859-1 и ~ -15. Если вы выбрали ~ 15, так как он содержит символ евро, который не соответствует ISO-8859-1 (Latin-1), вы можете пересмотреть использование Windows Latin-1 («Windows-1252»). Он также имеет специальные символы, такие как запятые. –

 Смежные вопросы

  • Нет связанных вопросов^_^