| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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. Подскажите пожалуйста, в чем проблемма??? |
| Автор: 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 | ||
| Кстати... А посылать обязательно из строки? Может лудше из массив байтов посылать? То есть переписать метод сенд, чтобы он примимал массив байтов и посылать
? |
| Автор: LSD 3.11.2004, 20:45 | ||
Согласен с 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. Вот в этом и проблема... |
| Автор: Разгильдяй 4.11.2004, 17:34 |
| а по поводу оптимальности, прогу писал не я. |