Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Сохранение DOM в XML


Автор: Разгильдяй 3.11.2004, 12:12
Есть код

[code=]

public void sendXMLDocument( Document query )
{
try
{
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans = tf.newTransformer();
trans.setOutputProperty( OutputKeys.METHOD, "xml" );
trans.setOutputProperty( OutputKeys.ENCODING, "KOI8-R" );
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
trans.transform( new DOMSource( query ), new StreamResult( new OutputStreamWriter( byteArray, "KOI8-R" ) ) );
send( byteArray.toString() );
}
catch ( Exception e )
{
e.printStackTrace();
}
}

[/CODE]

В Java 1.4 все работало корректно.
В Java 1.5 при сохранении получаю в заголовке XML encoding="KOI8-R", а русский текст записывается в кодировке UTF-8.
Подскажите пожалуйста, в чем проблемма??? :angry:

Автор: DarkDS 3.11.2004, 15:32
Сохраняет какой метод? send( byteArray.toString() );?

Автор: Разгильдяй 3.11.2004, 15:45
Сохраняет

trans.transform( new DOMSource( query ), new StreamResult( new OutputStreamWriter( byteArray, "KOI8-R" ) ) );

send - отправляет.

Автор: Разгильдяй 3.11.2004, 15:57
вставка byteArray.toString("KOI8-R") не помогает... (

Автор: DarkDS 3.11.2004, 15:58
Скорее всего у тебя проблемма в byteArray.toString()
То есть функция toString() скорее всего приводит к Юникоду.
Для того чтобы возвращала в нужной кодировке используй byteArray.toString("Encoding") в твоем случае:
byteArray.toString("KOI8-R")
Добавлено @ 15:59
Апдейт:
Тогда нужно еще подумать.

Автор: DarkDS 3.11.2004, 16:09
Кстати... А посылать обязательно из строки? Может лудше из массив байтов посылать?
То есть переписать метод сенд, чтобы он примимал массив байтов и посылать
Код

byteArray.toByteArray()

?

Автор: LSD 3.11.2004, 20:45
Цитата
send( byteArray.toString() );

Согласен с DarkDS, зачем byteArray, преобразовывать в строку? XML документ это вообще говоря уже бинарные данные, по сути эти данные конечно строковые, но они уже находятся в некой кодировке, и соответственно к преобразованиям кодировок относятся плохо.

Автор: Разгильдяй 4.11.2004, 17:04
Написал для отладки так

[code=]
try
{
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans = tf.newTransformer();
trans.setOutputProperty( OutputKeys.METHOD, "xml" );
trans.setOutputProperty( OutputKeys.ENCODING, "KOI8-R" );
trans.transform( new DOMSource( query ), new StreamResult( new OutputStreamWriter( System.out, "KOI8-R" ) ) );
}
catch ( Exception e )
{
e.printStackTrace();
}
[/CODE]

Все равно сохраняет криво, русские символы в кодировке UTF-8.
Вот в этом и проблема... smile

Автор: Разгильдяй 4.11.2004, 17:34
а по поводу оптимальности, прогу писал не я. smile Просто надо переделать кое-что.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)