Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Преобразование URI

7.2K
10 октября 2009 года
polaroid
94 / / 05.07.2008
Проблема такая - всем известно, что по стандарту URI может содержать только определенный набор символов - латиницу. Если мы используем, например, русский текст вот так:


он должен кодироваться в юникод вот так:


Но еще ведь есть такая фишка, как URL encoding. Т.е. части URL на латинице, можно заменять соостветствующими байтами. Например


можно заменить на


Собственно вопрос - как различить юникод и такой вот URL encoding?

12
10 октября 2009 года
alekciy
3.0K / / 13.12.2005
Данные закодированные percent-encoding методом всегда соответствуют кодам юникода.
7.2K
10 октября 2009 года
polaroid
94 / / 05.07.2008
Как видно из моего сообщения - не всегда(хотя в RFC - всегда). В первом случае, который я привел, используется реально юникод. т.е. один символ соответствует двум байтам, например так: %D0%9C - это буква 'М' (русская) в слове Микрокредит.
Во втором случае - кодируется НЕ юникодом. т.е. на один символ - один байт:
%69 - 'i'
%6E - 'n'
и т.д.

Мне нужно вот такие вот НЕ юникодовые символы переводить в нормальные ASCII, а юникодовые не трогать. Только вот как их различать?
12
11 октября 2009 года
alekciy
3.0K / / 13.12.2005
В каждом языке есть функции в духе URL encode/decode, зачем изращаться и что-то придумывать самому?

Посколько кодирование происходит в utf-8, то все просто:
Цитата:

Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байтов (на деле, только до 4 байт, поскольку в Юникоде нет символов с кодом больше 10FFFF и вводить их в будущем не собираются), в которых первый байт всегда имеет вид 11xxxxxx, а остальные — 10xxxxxx.


utf-8 вообще хорош тем, что даже не зная количество байт на символ (т.к. их може быть от 2 до 4, на практике) всегда можно по байтовой последовательности это вычислить (http://habrahabr.ru/blogs/erlang/52493/#comment_1396052 четверный абзац).

7.2K
11 октября 2009 года
polaroid
94 / / 05.07.2008
Цитата:
В каждом языке есть функции в духе URL encode/decode, зачем изращаться и что-то придумывать самому?


У меня немного иная задача, которая не предполагает использование RTL, вообще все это должно реализоваться на ассемблере.

Спасибо большое за инфу. Пойду думать над реализацией

12
12 октября 2009 года
alekciy
3.0K / / 13.12.2005
Тогда однозначно читай байтовый поток и по нему суди. Для utf-8 все ловиться достаточно легко.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог