• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы morpheus
  • Дата начала
M

morpheus

Доброе всем ...
Среда:
Сервер домино(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 какойнибуть удобоваримый?
 
N

nvyush

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

morpheus

someString.getBytes("UTF-8")); - пробовал, не помогает

- тут нашел, ковырял ковырял - никак

да, и s2 ничего не получает, он мне просто таким образом отвечает на мой запрос к нему
 
N

nvyush

URLEncoder.encode(someStringWithRussianChars, "UTF-8").getBytes("UTF-8"); ???
 
M

morpheus

пишу
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
 
N

nvyush

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

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

morpheus

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


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

lmike

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

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

morpheus

lmike
Спасибо

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

Akupaka

<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
Ну, причем тут глюкософт? Это кривые руки разрабов. Такое часто бывает, система работает в одной кодировке, а разраб грит кодировка ответа/страницы будет такой, и пишет туды то, что ему система в своей кодировке дала.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
в догонку
 
A

Akupaka

к сожалению на стороннюю орг-цию повлиять не могу
Вот и зря, надо им сказать, чтобы они согласовали свой код, а, если будут отнекиваться, тогда уже своими силами бороться. А вдруг сделают как надо )
 
N

nvyush

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
<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 дефолтно (можно сослаться на экономию памяти ;) )
и классы сделаны отдельные!
не надо их защищать - их мордой в собсвенное дерьмо почаще:
 
M

morpheus

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
Morpheus
можно отдавать им ISO-8859-1
все русские символы энкодить в 7-бит

а ответ - обратно
это самое "правильное" решение
ибо нек. требования могут не допускають utf8
и хидер прописывать соответ.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
но ранее указанную ссылку - тоже желательно прочесть

Добавлено: а вот отсюда
мне нра вот это ;) -

Добавлено: и вот это пригодится:
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
тута ещё вспомнил...
а случаем не из нотусёвой консоли вывод, нам, Morpheus привёл?
если да - то она, в винде, соответствует платформенным настройкам (1251), в ссылке выше это описано
 
M

morpheus

lmike
неа, это текст который я получил ява - агентом, засунул в поле и сохранил документ
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
в промежутке есть несколько действий, одно из них - кодировка файла, дефолтно - "платформенная"
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!