возврат XML UTF-8
От: consumer  
Дата: 17.05.07 15:02
Оценка:
Надо передать двоичные данные из HTTP сервера (по ajax запросу).
Начальство требует UTF-8.

Ну я так понял эти двоичные данные возвращаем как xml'ник вида:
<?xml version="1.0" encoding="UTF-8"?>
<GetAllData>
....наши данные строкой UTF-8...
<GetAllData>


делаю я это так (bytebuf — byte[] — наши двоичные данные):
       
String Result = "строка служебных данных"+new String(bytebuf, "UTF-8");


FireFox выдаёт следующее:

.
Ошибка синтаксического анализа XML: неправильный
Адрес: http://localhost/index.html?action=get_all_data&amp;session_id=_&amp;randomseed=11793882230000.6180139854507215
Строка 1, символ 100:<?xml version="1.0" encoding="UTF-8"?><GetAllData>session_id=session165748292071628961179413741390?


Как раз после "?" идут наши данные. И не понятно, что делать. Почему xml-парсер браузера не справляется со строкой.
Или я что-то не так делаю... (HTTP-сервер рукотворный, с любыми другими АЯКС-запросами справляется)...
Может надо чарсет ещё и в самом HTTP ответе указывать?
Re: возврат XML UTF-8
От: aka50 Россия  
Дата: 17.05.07 15:07
Оценка:
Здравствуйте, consumer, Вы писали:

C>Надо передать двоичные данные из HTTP сервера (по ajax запросу).

C>Начальство требует UTF-8.

C>Как раз после "?" идут наши данные. И не понятно, что делать. Почему xml-парсер браузера не справляется со строкой.

C>Или я что-то не так делаю... (HTTP-сервер рукотворный, с любыми другими АЯКС-запросами справляется)...
C>Может надо чарсет ещё и в самом HTTP ответе указывать?

потому что надо делать urlencode, ибо строка запроса — это ascii. Разные кодировки можно использовать только внутри контента (т.е. даже в хидере нельзя).
Re: возврат XML UTF-8
От: . Великобритания  
Дата: 17.05.07 15:07
Оценка:
consumer wrote:

> Ну я так понял эти двоичные данные возвращаем как xml'ник вида:

Не надо генерировать xml как текстовый файл, для этого есть DOM/SAX и прочее.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: возврат XML UTF-8
От: C0s Россия  
Дата: 17.05.07 15:10
Оценка:
Здравствуйте, consumer, Вы писали:

C>Надо передать двоичные данные из HTTP сервера (по ajax запросу).

C>Начальство требует UTF-8.

C>делаю я это так (bytebuf — byte[] — наши двоичные данные):

       
C>String Result = "строка служебных данных"+new String(bytebuf, "UTF-8");


а разве ваши двоичные данные — это уже строка в кодировке utf-8?

и вообще, писать что угодно в xml напрямую нельзя, там же могут попасться символы < или &, которые всю xml-ную малину портят
нужно паковать либо через cdata, что укладывается в стандарты xml, либо рассмотривать вариант, скажем, с base64-кодированием данных

C>Или я что-то не так делаю... (HTTP-сервер рукотворный, с любыми другими АЯКС-запросами справляется)...


с любыми ли?
Re: возврат XML UTF-8
От: Аноним  
Дата: 18.05.07 07:48
Оценка:
Здравствуйте, consumer, Вы писали:

C>Надо передать двоичные данные из HTTP сервера (по ajax запросу).

C>Начальство требует UTF-8.

C>Ну я так понял эти двоичные данные возвращаем как xml'ник вида:

C><?xml version="1.0" encoding="UTF-8"?>
C><GetAllData>
C>....наши данные строкой UTF-8...
C><GetAllData>
C>


Если передаешь XML в кодировке UTF-8, то нужно (в сервлете) добавить что-то типа

httpServletResponse.setContentType("text/xml");
httpServletResponse.setCharacterEncoding("UTF-8");

Но вообще-то просто бинарные данные в XML файл писать нельзя (мне так кажется) из-за наличия спец символов (о чем уже писали).
Re[2]: возврат XML UTF-8
От: consumer  
Дата: 18.05.07 09:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, consumer, Вы писали:


C>>Надо передать двоичные данные из HTTP сервера (по ajax запросу).

C>>Начальство требует UTF-8.


А>Если передаешь XML в кодировке UTF-8, то нужно (в сервлете) добавить что-то типа


А>
А>httpServletResponse.setContentType("text/xml");
А>httpServletResponse.setCharacterEncoding("UTF-8");
А>

А>Но вообще-то просто бинарные данные в XML файл писать нельзя (мне так кажется) из-за наличия спец символов (о чем уже писали).
да, пожалуй в text/plain нужно возвращать. в BASE64 не могу, потому как требование utf8 (видимо чтобы англиский текст читался...)
Только у меня не сервлет а рукотворный HTTP-сервер. Если не трудно как выглядит этот самый CharacterEncoding в ХТТП-ответе?

Я добавил поле

"Content-Encoding: utf-8";

И изменил:

"Content-type: text/plain charset=utf-8";

CharacterEncoding ещё где-то определяется?...
В общем, теперь ответ нормальный приходит, вместо непечатаемых символов квадратики. Теперь чтобы получить из этой utf-8 строки исходные двоичные данные, нужно в яваскрипте её раскодировать...

На всякий случай спрошу.

1.на сервере: str = new String(bytebuf, "UTF-8");
2.в яваскрипте клента приходит эта utf-8-строка
3.как поучить исходные двоичные данные?

или я уже на сервере фигню сделал?
Re[3]: возврат XML UTF-8
От: C0s Россия  
Дата: 18.05.07 09:25
Оценка:
Здравствуйте, consumer, Вы писали:

C>или я уже на сервере фигню сделал?


именно
вместо сделанной фигни используй base64-кодирование (mime) — возьми за основу код java.util.prefs.Base64
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.