Image

Imageshainsky wrote in Imageru_java

Listens: Jimi Hendrix - The Wind Cries Mary (Radio Paradise - DJ-mixed modern & classic rock, world, electron

URL-декодирование



Отправляю на гейт СМС с русским алфавитом:
"абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"

Гейт получает эту СМС, парсит в UTF-16 Big Endian, затем URL-кодирует и делает HTTP-запрос на моё Java-приложение:


http://xxx.xxx/get?body=%040%041%042%043%044%045%04Q%046%047%048%049%04%3A %04%3B%04%3C%04%3D%04%3E%04%3F%04%40%04A%04B%04C%04D%04E%04F%04G%04H %04I%04J%04K%04L%04M%04N%04O+)%04%10%04%11%04%12%04%13%04%14%04%15%04 %01%04%16%04%17%04%18%04%19%04%1A%04%1B%04%1C%04%1D%04%1E%04%1F%04+%04! %04%22%04%23%04%24%04%25%04%26%04'%04(%04)%04*%04%2B%04%2C%04-%04.%04%2F


Java-приложение получает URI и пытается данную строку (полученную в параметре body) декодировать назад:

System.out.println(URLDecoder.decode(body, "UTF-16BE"));


Итог плачевен - пол-алфавита съедено:
"?0?1?2?3?4?5?Q?6?7?8?9клмнопр?A?B?C?D?E?F?G?H?I?J?K?L?M?N?O )АБВГДЕЁЖЗИЙКЛМНОП? ?!ТУФХЦ?'?(?)?*ЫЬ?-?.Я".

Что я делаю неправильно?

Upd. Вылечилось путем переподвыподверта: new String(URLDecoder.decode(url, "UTF-8").getBytes("UTF-8"), "UTF-16BE"). Но почему первоначальный вариант не сработал, непонятно.