Преобразование кодировок

morpheus

скриптописец
07.08.2006
3 915
1
#1
Доброе всем ...
Среда:
Сервер домино(s1) 8.5 и сервер сторонней орг-ции ( неизвесный - s2 )

через интернет общаемся с помощью XML запросов ( агент на Java )

я делаю запрос, а в ответ от сервера s2 получаю в формате :
<?xml version='1.0' encoding='utf-8'?>
<response>
<phone value="503123456" />
<error_code value="1" />
<error_message>РћС?РёР±РєР° обработки XML-запроса </error_message>
</response>


кидаю в "Штирлица"(определяет что UTF-8), получаю преобразованную строку :
<?xml version='1.0' encoding='utf-8'?>
<response>
<phone value="503123456" />
<error_code value="1" />
<error_message>Оlибка обработки XML-запроса </error_message>
</response>

как переделать текст из UTF-8 какойнибуть удобоваримый?
 

nvyush

Lotus team
22.04.2009
2 317
0
#2
Тут, скорее, проблема не в переделке UTF-8 в удобоваримый, а в формировании правильного UTF-8. Похоже, что s2 получает неправильный utf-8. Изначально строка в формате UNICODE, получить из неё utf-8 можно так: someString.getBytes("UTF-8"));
 

morpheus

скриптописец
07.08.2006
3 915
1
#5
пишу
String UniStr = URLEncoder.encode(s, "UTF-8") ;

выдаёт
%3C%3Fxml+version%3D%221.0%22+encoding%3D%22utf-8%22%3F%3E%0A%3Cresponse%3E%0A%0A%3Cerror_code+value%3D%221%22+%2F%3E%0A%3Cerror_message%3E%D0%A0%D1%9B%D0%A1%E2%82%AC%D0%A0%D1%91%D0%A0%C2%B1%D0%A0%D1%94%D0%A0%C2%B0+%D0%A0%D1%95%D0%A0%C2%B1%D0%A1%D0%82%D0%A0%C2%B0%D0%A0%C2%B1%D0%A0%D1%95%D0%A1%E2%80%9A%D0%A0%D1%94%D0%A0%D1%91+XML-%D0%A0%C2%B7%D0%A0%C2%B0%D0%A0%D1%97%D0%A1%D0%82%D0%A0%D1%95%D0%A1%D0%83%D0%A0%C2%B0%3C%2Ferror_message%3E%0A%3C%2Fresponse%3E%0A


:D
 

nvyush

Lotus team
22.04.2009
2 317
0
#6
Чем отлаживаем/смотрим? Я, прежде чем вставлять яву в Лотус, сперва доводил до ума в NetBeans'e. Знаю, что можно эклипс прямо к Лотусу прикрутить, но пока не заморачивался, говорят, у него рисовалка форм кривоватая.
Кстати, UniStr — неправильное имя переменной явы, д.б. uniStr (Sun рекомендует :D).

P.S. Нужно попробовать "энкодить" только "внутренности" тэга с кириллическим текстом в запросе к s2.
 

morpheus

скриптописец
07.08.2006
3 915
1
#7
Чем отлаживаем/смотрим? Я, прежде чем вставлять яву в Лотус, сперва доводил до ума в NetBeans'e. Знаю, что можно эклипс прямо к Лотусу прикрутить, но пока не заморачивался, говорят, у него рисовалка форм кривоватая.
эээ я кагбэ яву 2й раз в жизни вижу.


насчет переменных учту, результат выполнения просто записывю в документ ( в поле ) и потом сматрю результат
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#8
стороння организация может обсчаться в ISO-8859-1 (или в чём другом ;) - как-то так ) ...
и оно гадит :D, давая битый UT-8
простой эксперимент:
echo "РћС?РёР±РєР° обработки XML-запроса" | iconv -t cp1251
даёт ответ:
Ошибка обработки XML-запроса

видозный глюкософт вам отвечает в cp1251, а в хидере кажить ютф8
вот такие весёлые парни эти МСлюбы
 

morpheus

скриптописец
07.08.2006
3 915
1
#9
lmike
Спасибо

к сожалению на стороннюю орг-цию повлиять не могу, может подскажете как можно решить на моей стороне проблему?!
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#10
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">в защиту глюкософта</div></div><div class="sp-body"><div class="sp-content">
видозный глюкософт вам отвечает в cp1251, а в хидере кажить ютф8
Ну, причем тут глюкософт? Это кривые руки разрабов. Такое часто бывает, система работает в одной кодировке, а разраб грит кодировка ответа/страницы будет такой, и пишет туды то, что ему система в своей кодировке дала.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#12
к сожалению на стороннюю орг-цию повлиять не могу
Вот и зря, надо им сказать, чтобы они согласовали свой код, а, если будут отнекиваться, тогда уже своими силами бороться. А вдруг сделают как надо )
 

nvyush

Lotus team
22.04.2009
2 317
0
#13
lmike прав, такое тоже может быть. В этом случае можно попробовать стороннему серваку отдать запрос в кодировке windows-1251, и в заголовке указать windows-1251, а потом, если не прокатит в заголовке указать utf-8. Хотя это уже изврат.
И поскольку не уверен, что примечание к посту 6 прочитано, повторюсь:
Нужно попробовать "энкодить" только "внутренности" тэга с кириллическим текстом в запросе к s2. По крайней мере у меня так работает сервис отправки смс.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#14
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">в защиту глюкософта</div></div><div class="sp-body"><div class="sp-content">
Ну, причем тут глюкософт? Это кривые руки разрабов. Такое часто бывает, система работает в одной кодировке, а разраб грит кодировка ответа/страницы будет такой, и пишет туды то, что ему система в своей кодировке дала.
а ты задай себе вопрос - они специально это делают или софт способствует :D
ютф8 - уже давно поддерживается виндями, но "злонамерянно" впердоливается 1251 дефолтно (можно сослаться на экономию памяти ;) )
и классы сделаны отдельные!
не надо их защищать - их мордой в собсвенное дерьмо почаще:
http://wiki.centercest.ru/doku.php?id=cowo...titive_behavior
 

morpheus

скриптописец
07.08.2006
3 915
1
#15
Вот и зря, надо им сказать, чтобы они согласовали свой код, а, если будут отнекиваться, тогда уже своими силами бороться. А вдруг сделают как надо )
а что мне им предьявить?! Я даже пока не разобрался где нетак
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#16
Morpheus
можно отдавать им ISO-8859-1
все русские символы энкодить в 7-бит
http://stackoverflow.com/questions/655891/...-as-single-byte
а ответ - обратно
это самое "правильное" решение
ибо нек. требования могут не допускають utf8
и хидер прописывать соответ.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#17

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#18
тута ещё вспомнил...
а случаем не из нотусёвой консоли вывод, нам, Morpheus привёл?
если да - то она, в винде, соответствует платформенным настройкам (1251), в ссылке выше это описано
 

morpheus

скриптописец
07.08.2006
3 915
1
#19
lmike
неа, это текст который я получил ява - агентом, засунул в поле и сохранил документ
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#20
в промежутке есть несколько действий, одно из них - кодировка файла, дефолтно - "платформенная"