2010-05-29 1 views
3

Я пытаюсь написать файл библиотеки XML, который можно снова прочитать в моей программе.Написание XML в разных кодировках символов с помощью Java

Код автор файла выглядит следующим образом:

XMLBuilder builder = new XMLBuilder(); 
Document doc = builder.build(bookList); 
DOMImplementation impl = doc.getImplementation(); 
DOMImplementationLS implLS = (DOMImplementationLS) impl.getFeature("LS", "3.0"); 
LSSerializer ser = implLS.createLSSerializer(); 
String out = ser.writeToString(doc); 

//System.out.println(out); 

try{ 
    FileWriter fstream = new FileWriter(location); 
    BufferedWriter outwrite = new BufferedWriter(fstream); 
    outwrite.write(out); 
    outwrite.close(); 
}catch (Exception e){ 
} 

Приведенный выше код делает написать документ XML.

Однако в заголовке XML это атрибут, который файл закодирован в UTF-16.

, когда я прочитал в файле, я получаю сообщение об ошибке:

«содержание не допускается в прологе»

эта ошибка не возникает, когда атрибут кодирования вручную изменено на UTF-8.

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

код для разбора в это

DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance(); 
DocumentBuilder loader = factory.newDocumentBuilder(); 
Document document = loader.parse(filename); 

последняя строка возвращает ошибку.

+0

Это может помочь, если вы сказали нам, что такое XMLBuilder. Googling для XMLBuilder показывает (я думаю) 7 разных классов ... на первой странице результатов поиска! –

+0

oh, извините, XMLBuilder - это самосозданный класс, который принимает SortedSet of Book (класс оболочки для файла и метаданных) и возвращает построенный документ. Эта часть отлично работает. – romnempire

ответ

2

Метод LSSerializer writeToString не позволяет Сериализатору выбирать кодировку.

с методом setEncoding экземпляра LSOutput, метод записи LSSerializer может использоваться для изменения кодировки. LSOutput CharacterStream может быть настроен на экземпляр BufferedWriter, так что вызовы LSSerializer для записи будут записываться в файл.

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