2015-04-07 2 views
0

У меня проблема с кодировкой XML. Когда я создал XML на локальном хосте с кодировкой cp1251 все круто
Но когда я развернуть мой модуль на сервере, XML-файл имеет неправильные символы как «Р¤Р ° Р№Р» ПФР"Проблемы с кодировкой XML в Java

StringWriter writer = new StringWriter(); 
StreamResult result = new StreamResult(writer); 
DOMSource source = new DOMSource(doc); 

transformer.setOutputProperty(OutputKeys.ENCODING, "cp1251"); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.transform(source, result); 

String attach = writer.toString(); 

Как я могу починить это?

+1

почему у не используется Юникод? –

+0

Что вы читаете этот файл? – reto

+0

Мы сами сгенерировали его – user3114474

ответ

1

Я пытался читать XML Document который UTF-8 закодированный, и попытались превратить его в другой кодировке, которая не имела никакого эффекта на всех (существующей кодировки документа использовали вместо одного я указал с свойство вывода). При создании нового документа в памяти (кодировка равна нулю) свойство вывода использовалось правильно.

Похоже, при преобразовании в XML Document, выход свойство OutputKeys.ENCODING используется только когда org.w3c.dom.Document делает не имеют кодировку еще.

Решение
Для того, чтобы изменить кодирование из XML-документа, не следует использовать Document в качестве источника, но его корневого узла (документ элемент) вместо этого.

// use doc.getDocumentElement() instead of doc 
DOMSource source = new DOMSource(doc.getDocumentElement()); 

Работает как очарование.

Исходный документ:

<?xml version="1.0" encoding="UTF-8"?> 
<foo bla="Grüezi"> 
    Encoding test äöüÄÖÜ «Test» 
</foo> 

Выход с "cp1251":

<?xml version="1.0" encoding="WINDOWS-1251"?><foo bla="Gr&#252;ezi"> 
    Encoding test &#228;&#246;&#252;&#196;&#214;&#220; «Test» 
</foo> 
0

А (строка) Писатель не будет зависеть от выходного кодирования (только от используемого входного кодирования), а Java поддерживает весь текст в Unicode. Либо напишите в двоичный файл, либо выведите строку как Cp1251.

Обратите внимание, что кодировка должна быть в линии <?xml encoding="Windows-1251">. И я думаю, что «Cp1251» немного больше java.

Таким образом, ошибка, вероятно, заключается в написании строки; например

response.setCharacterEncoding("Windows-1251"); 
response.write(attach); 

Или

attach.getBytes("Windows-1251") 
Смежные вопросы