Java разница между двумя URL-кодированными строками - PullRequest
3 голосов
/ 10 мая 2011

В чем разница между следующими двумя закодированными строками?

%D0%9E%D0%BA%D0%B6%D1%8D%D0%B7

и

%26%231055%3B%26%231088%3B%26%231080%3B%26%231074%3B%26%231077%3B%26%231090%3B

Я пытаюсь URL Кодировать русский текст "Привет" во вторую закодированную строку выше (кодировщик W3Schools делает это правильно), но используемый кодировщик URL продолжает давать мне первый кодированный строка выше. Я использую URLUTF8Encoder.java из консорциума W3. Я должен использовать это, поскольку я работаю на мобильной платформе, требующей J2ME.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 10 мая 2011

Кодировщик URL в w3schools делает это совершенно неправильно.%D0%9E%D0%BA%D0%B6%D1%8D%D0%B7 совершенно правильно.Это также то, что я получаю, когда делаю

String encoded = URLEncoder.encode("Привет", "UTF-8");

Когда я декодирую URL-адрес ответа w3schools следующим образом

String decoded = URLDecoder.decode("%26%231055%3B%26%231088%3B%26%231080%3B%26%231074%3B%26%231077%3B%26%231090%3B", "UTF-8");

, тогда я получаю Привет, которые являются именно этими русскими символами,но затем преобразуются в XML-сущности .

Этот сайт w3schools никак не связан с Консорциумом W3.Смотрите также w3fools .

3 голосов
/ 10 мая 2011

Ваша строка "Привет" кодируется как:

%D0%9E    
%D0%BA
%D0%B6
%D1%8D
%D0%B7

Вторая строка, кажется, преобразуется в объекты HTML перед кодировкой URL:

%26%231055%3B
%26%231088%3B
%26%231080%3B
%26%231074%3B
%26%231077%3B
%26%231090%3B

%26 is &, %23 - #, %3B - ;:

П
р
и
в
е
т
...