Преобразование URI
он должен кодироваться в юникод вот так:
Цитата:
Но еще ведь есть такая фишка, как URL encoding. Т.е. части URL на латинице, можно заменять соостветствующими байтами. Например
можно заменить на
Собственно вопрос - как различить юникод и такой вот URL encoding?
Данные закодированные percent-encoding методом всегда соответствуют кодам юникода.
Во втором случае - кодируется НЕ юникодом. т.е. на один символ - один байт:
%69 - 'i'
%6E - 'n'
и т.д.
Мне нужно вот такие вот НЕ юникодовые символы переводить в нормальные ASCII, а юникодовые не трогать. Только вот как их различать?
Посколько кодирование происходит в 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 четверный абзац).
Цитата:
В каждом языке есть функции в духе URL encode/decode, зачем изращаться и что-то придумывать самому?
У меня немного иная задача, которая не предполагает использование RTL, вообще все это должно реализоваться на ассемблере.
Спасибо большое за инфу. Пойду думать над реализацией
Тогда однозначно читай байтовый поток и по нему суди. Для utf-8 все ловиться достаточно легко.