Hello, Mimi!
You wrote on Fri, 20 Oct 2006 13:17:41 GMT:
YK>> Я имел в виду фильтр, который перекодирует ответ, а не запрос. YK>> Для уверенности фильтры временно можно убрать, строки и так в YK>> UTF-8.
M> Нет, такого фильтра нет. Думаете, стоит использовать также и M> фильтр для перекодировки ответа?
Использовать нужно то, что необходимо. В данном конкретном случае фильтр для ответа не нужен.
M>>>
YK>> Если retXmlBuf это строка, а не какой-нибудь массив байт, то YK>> идей больше нет.
M> retXmlBuf у нас String. M> Т.е. если бы это был byte array то возможно это могло стать M> причиной ошибки?
Проблема могла бы быть, если бы байты перегонялись в строку с использовнием кодировки по умолчанию, отличной от UTF-8. Но как себя ведет PrintWriter c массивами байт я честно говоря не помню.
M>// Собсна буфер: M>// <?xml version="1.0" encoding="utf-8"?>
(1)
[.....] M>// <Name Name="Name" formap="1">Куку</Name> M>// <Description Name="Description">тралала</Description>
(2)
[.....]
разве в utf-8 русские буковки так выглядят??
откуда вы xml берёте?
не может такого получиться, что взяли строки в cp1251, а в заголовок encoding — utf-8??
а вот вы попробуйте взять тот xml который вы отквотили, сохраните в файлик *.xml и IE его откройте.
ведь не откроется он...
y>> разве в utf-8 русские буковки так выглядят?? YK>Ну а как _буковки_ еще могут выглядеть?
русские буковки в utf-8 как выглядят? примерно так как у нее в исходном сообщении: РљСѓРєСѓ
YK>Она ж вам не бинарник показывает.
гхм.. что есть бинарник в случае xml-я?
у неё я понял вроде был фильтр, который перекодирует всё в utf.
ей бы логировать xml-и уже после отработки фильтра. и показать что получается
Hello, yacc!
You wrote on Fri, 20 Oct 2006 14:45:34 GMT:
y>>> разве в utf-8 русские буковки так выглядят?? YK>> Ну а как _буковки_ еще могут выглядеть? y> русские буковки в utf-8 как выглядят? примерно так как у нее в y> исходном сообщении: РљСѓРєСѓ
Русские символы, так же как и все другие, представляются в виде байт. Как это выглядит, зависит исключительно от того, какую кодировку использовать для просмотра.
YK>> Она ж вам не бинарник показывает. y> гхм.. что есть бинарник в случае xml-я?
Байты.
y> у неё я понял вроде был фильтр, который перекодирует всё в utf. y> ей бы логировать xml-и уже после отработки фильтра. и показать что y> получается
YK>Русские символы, так же как и все другие, представляются в виде байт. Как это выглядит, зависит исключительно от того, какую кодировку использовать для просмотра.
лол. за ликбез спасибо)))
тут сообщения в 1251. в её терминах я и говорю.
y>> гхм.. что есть бинарник в случае xml-я? YK>Байты.
логично.
YK>Фильтр этот давно уже отключить надо
надо. но если у неё действительно изначальные xml-и в cp1251, а в заголовке прописан utf — после отключени фильтра responseXML работать не будет...
Девушка, проверьте свой реальный CONTENT_TYPE. Комментарий справа ниже наводит на смутные сомнения (что за UFT-8?)
M> response.setContentType(CONTENT_TYPE); // "text/xml; charset=UFT-8" берется из глобалсов
Других причин Ваших бед не вижу.
Кроме того, Ваш запрос вызывает тоже некоторое недоумение:
M> http_request.onreadystatechange = та-функция-которая-вызовется-при-ответе; M> http_request.open('GET', url); M> http_request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); M> http_request.setRequestHeader("Content-Type", "text/xml; charset=UTF-8"); M> http_request.send(null);
Во-первых, чем мудрить с "If-Modified-Since", проще на сервере при ответе на запрос добавлять заголовки
Во-вторых, Ваш "Content-Type" в запросах типа 'GET' не работает. Он определяет кодировку тела запроса ('POST'). Можете смело убрать. Запрос (url) у Вас пойдет в той кодировке, которую имеет контекст (страница, содержащая код JavaScript). У Вас это utf-8, если не ошибаюсь.
И напоследок совет для отладки:
M> В яваскрипте я этот хмл беру вот так M> M> var xmldoc = http_request.responseXML;
перед "вот так" вставьте
alert(http_request.responseText);
и увидите тот XML, который приходит, во всей красе.
Re[10]: Unicode && AJAX
От:
Аноним
Дата:
23.10.06 06:48
Оценка:
Здравствуйте, mag2005, Вы писали:
M>Здравствуйте, Mimi, Вы писали:
M>Девушка, проверьте свой реальный CONTENT_TYPE. Комментарий справа ниже наводит на смутные сомнения (что за UFT-8?)
Осспади... да опечатка в комменте. Прям совсем я что ли...
public static final String ENCODING = "UTF-8";
M>> response.setContentType(CONTENT_TYPE); // "text/xml; charset=UFT-8" берется из глобалсов
M>Других причин Ваших бед не вижу.
M>Кроме того, Ваш запрос вызывает тоже некоторое недоумение:
M>> http_request.onreadystatechange = та-функция-которая-вызовется-при-ответе; M>> http_request.open('GET', url); M>> http_request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); M>> http_request.setRequestHeader("Content-Type", "text/xml; charset=UTF-8"); M>> http_request.send(null);
M>Во-первых, чем мудрить с "If-Modified-Since", проще на сервере при ответе на запрос добавлять заголовки
M>response.setHeader( "Cache-Control", "no-cache" ); M>response.setHeader( "Pragma", "no-cache" );
Почему "мудрить"? И чем этот вариант лучше? Эффект-то один и тот же.
M>Во-вторых, Ваш "Content-Type" в запросах типа 'GET' не работает. Он определяет кодировку тела запроса ('POST'). Можете смело убрать. Запрос (url) у Вас пойдет в той кодировке, которую имеет контекст (страница, содержащая код JavaScript). У Вас это utf-8, если не ошибаюсь.
Именно UTF-8..
На POST меняла -- результат тот же.
M>И напоследок совет для отладки:
M>> В яваскрипте я этот хмл беру вот так M>> M>> var xmldoc = http_request.responseXML;
M>перед "вот так" вставьте
M>alert(http_request.responseText);
M>и увидите тот XML, который приходит, во всей красе.
Да делала я так. Еще в самом начале, когда заметила что русские буквы мне на страницу как положено не показываются.
В XML [логгером в файл] мне пишется все ок, а на страницу попадает криво, причем только там где я использую Ajax.
Здравствуйте, Mimi, Вы писали:
M>Из яваскрипта делается запрос AJAX-ом на url (который и есть сервлет с кодировкой утф-8). Этот сервлет берет из бизнес-логики XML (причем, в нем все русские символы нормально читаются, выводила логгером, видела).
Нормально читаются в какой кодировке?
Re[10]: Unicode && AJAX
От:
Аноним
Дата:
23.10.06 07:34
Оценка:
Здравствуйте, yacc, Вы писали:
M>>// Собсна буфер: M>>// <?xml version="1.0" encoding="utf-8"?> Y>(1) Y>[.....] M>>// <Name Name="Name" formap="1">Куку</Name> M>>// <Description Name="Description">тралала</Description> Y>(2) Y>[.....] Y>разве в utf-8 русские буковки так выглядят?? Y>откуда вы xml берёте?
XML берется из сервлета.
Y>не может такого получиться, что взяли строки в cp1251, а в заголовок encoding — utf-8?? Y>а вот вы попробуйте взять тот xml который вы отквотили, сохраните в файлик *.xml и IE его откройте. Y>ведь не откроется он...
В том-то и дело, что открывается. Я в самом начале еще писала, что XML в логи на диск пишется нормально, русские буквы читаются.
Здравствуйте, <Аноним>, Вы писали:
А>В том-то и дело, что открывается. Я в самом начале еще писала, что XML в логи на диск пишется нормально, русские буквы читаются.
выложи сюда как прикрепленый файл твой XML, или куда-нить в доступное место.
Здравствуйте, Lucker, Вы писали:
L>Здравствуйте, <Аноним>, Вы писали:
А>>В том-то и дело, что открывается. Я в самом начале еще писала, что XML в логи на диск пишется нормально, русские буквы читаются. L>выложи сюда как прикрепленый файл твой XML, или куда-нить в доступное место.
Здравствуйте, Lucker, Вы писали:
L>Здравствуйте, Mimi, Вы писали:
M>>Вот примерно код сервлета:
M>>[code] M>>public void doPost(HttpServletRequest request, HttpServletResponse response) throws M>> ServletException, IOException M>>{ M>> // проверяем, есть ли юзер в сессии M>> // если да, пишем лог, что такой-то юзер запросил такую-то инфу M>> // ... проверяем права юзера... M>> // если можно позволить юзеру достать ту инфу, то
M>> response.setContentType(CONTENT_TYPE); // "text/xml; charset=UFT-8" берется из глобалсов M>> blManager blMan = new blManager(); M>> String retXmlBuf = null;
M>> if(isAuthorizedToGetThisInfo) retXmlBuf = blMan.getXMLfor(utilities.Globals.SOME_DEFINED_VAR); M>> out.println(retXmlBuf); M>> out.close();
L>я бы порекомендовал пользоваться для вывода символьных данных не ServletOutputStream-ом а PrintWriter-ом, если это не так.
Здравствуйте, Mimi, Вы писали: А>>>В том-то и дело, что открывается. Я в самом начале еще писала, что XML в логи на диск пишется нормально, русские буквы читаются. L>>выложи сюда как прикрепленый файл твой XML, или куда-нить в доступное место.
M>Вот здесь можно посмотреть XML
Здравствуйте, Mimi, Вы писали:
L>>я бы порекомендовал пользоваться для вывода символьных данных не ServletOutputStream-ом а PrintWriter-ом, если это не так.
M>Теперь использую PrintWriter -- один фиг.
ну и конечно response.getWriter нужно вызывать после response.setContentType.
Здравствуйте, Lucker, Вы писали:
L>Здравствуйте, Mimi, Вы писали:
M>>Из яваскрипта делается запрос AJAX-ом на url (который и есть сервлет с кодировкой утф-8). Этот сервлет берет из бизнес-логики XML (причем, в нем все русские символы нормально читаются, выводила логгером, видела).
L>Нормально читаются в какой кодировке?
Ну, в той, которая у меня в Сервлете, т.е. UTF-8
response.setCharacterEncoding(Globals.ENCODING); // "UTF-8"
PrintWriter out = new PrintWriter(response.getWriter());
Я потом в логи вывожу — проверяю, какой инкодинг.. и заодно вывожу буффер XML-я, все зашибись. Пишу XML в файл, открываю IE, все ок. А вот на странице где JavaScript берет responseXML уже все кривое. Хотя там тоже UTF-8.. Теряюсь в догадках...