Форум: "Потрепаться";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизHEX кодирование Найти похожие ветки
← →
Piter © (2005-11-14 16:18) [0]Есть такая программка UKC++ - она кодирует имена файлов в HEX формат... Никак не могу понять - что это за формат.
Итак, возьмем слово "Город
".
Программа кодирует его таким образом: %D0%93%D0%BE%D1%80%D0%BE%D0%B4
Очевидно, что это типа Unicode, так как на каждый символ - два байта, закодированных в строковом HEX.
Вообще нужен алгоритм, написанный на JavaScript, который преобразует эту строку обратно в "Город" :)
Ну или хотя бы алгоритм, хоть на каком алгоритмическом языке... Каким образом происходит кодирование?
Есть функция Escape в JavaScript, но она кодирует совсем не так. Например, слово "Город" она закодирует так: %u0413%u043E%u0440%u043E%u0434
Вот сижу, ломаю голову... Каким образом кодируется в программке, что:
Encode("Город") = %D0%93%D0%BE%D1%80%D0%BE%D0%B4 ?
← →
Piter © (2005-11-14 16:21) [1]Есть догадка...
А как хотя бы в Delphi сделать аналог функции ord, которую можно применить к WideChar?
← →
Рамиль © (2005-11-14 16:33) [2]Хм... Вообщето это utf-8 и есть :)
← →
Piter © (2005-11-14 16:48) [3]Рамиль © (14.11.05 16:33) [2]
Можно подробнее? Каким образом закодирована эта строка?
Какой функцией закодировать "Город", чтобы получить %D0%93%D0%BE%D1%80%D0%BE%D0%B4 ?
Желательно в контексте JS, но можно и на любом языке...
← →
begin...end © (2005-11-14 16:50) [4]> Piter © (14.11.05 16:48) [3]
А может, типа отнять $CFD0 от кода каждого символа?
← →
Piter © (2005-11-14 17:19) [5]begin...end © (14.11.05 16:50) [4]
Хм, ты прав... Получается HEX символ в стандартной ANSI-кодировке...
А почему так, не знаешь?
Или $CFD0 это как бы начало русской ANSI-таблицы в пространстве Unicode символов?
← →
Piter © (2005-11-14 17:22) [6]begin...end © (14.11.05 16:50) [4]
просто не хотелось бы делать перекодировку русско-зависимой... А вдруг там будут немецкие, например, символы, закодированные в HEX Unicode...
Как бы универсально преобразовывать?
← →
Piter © (2005-11-14 17:25) [7]Может, можно как-то связать перекодировку с функцией Escape, она тоже непонятно как кодирует:
Escape("Город") = %u0413%u043E%u0440%u043E%u0434
← →
Piter © (2005-11-14 17:29) [8]Как связать - понял.
Escape тоже самое, только почему-то она дает значения на $CC80 меньше для каждого символа :(
Блин, почему так сложно все...
← →
begin...end © (2005-11-14 17:29) [9]> Piter © (14.11.05 17:19) [5]
Это UTF-8, как уже сказали. Поищи таблицу перекодировки. [4] будет работать для кириллицы (ты спрашивал именно про неё), для других символов -- не знаю, надо смотреть таблицу.
← →
han_malign © (2005-11-14 18:01) [10]
> Поищи таблицу перекодировки.
- не все так просто, в UTF8 - "символ" - переменной длинны, в отличие от Unicode. Проблемы начнутся уже при присутствии ASCII (0..127) символов - они кодируются как есть - 1-м байтом...
← →
Piter © (2005-11-14 18:49) [11]Хм, очень все не просто. Написал программу. Но вот как обратно преобразовался "Город":
"Го?од" - почему-то буква "р" некорректно :(
Это видно из HEX-кодировки:
%D0%93%D0%BE%D1%80%D0%BE%D0%B4
Если все символы начинаются на $D0xx, то буква "р" почему-то на $D1xx
и если из $D180 вычесть $CFD0 - то не получится что надо.
В UTF8, видимо, используется то, что похожие символы остаются в английской кодировке...
Или я чего не понимаю...
← →
Piter © (2005-11-14 19:11) [12]Странно... Очень странно... Откуда эти D1?
Вот я взял русский алфавит:
а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
Вот как он переводится в HEX:
%D0%B0 %D0%B1 %D0%B2 %D0%B3 %D0%B4 %D0%B5 %D1%91 %D0%B6 %D0%B7 %D0%B8 %D0%B9 %D0%BA %D0%BB %D0%BC %D0%BD %D0%BE %D0%BF %D1%80 %D1%81 %D1%82 %D1%83 %D1%84 %D1%85 %D1%86 %D1%87 %D1%88 %D1%89 %D1%8A %D1%8B %D1%8C %D1%8D %D1%8E %D1%8F
А вот как он переводится обратно в русский, если вычитать $CC80 и переводить с помощью unescape:
аб?где?жзийклмноп????????????????
То есть, те буквы, которые начинаются на $D0 - все ок. А вот почему некоторые начинаются на $D1???
Они неправильно кодируются...
И ведь наверняка программа использует стандартные Win функции для кодировки имен файлов...
В чем же дело...
← →
begin...end © (2005-11-14 19:15) [13]Да, насчёт букв после "п" я не прав был: http://www.sci.kz/~sairan/kazcode/Table15.htm
← →
Piter © (2005-11-14 19:18) [14]Немного ошибся, обратно кодируется так:
абвгде?жзийклмноп????????????????
-----------------------------------------------------------------------
То есть, буквы идут очень странно:
от буквы "а" до буквы "п" включительно - от $D0B0 до $D0BF
от буквы "р" до буквы "я" - от $D180 до $D18F
Отдельно стоит буква "ё" - $D191
Что же это за кодировка такая?
И как нормально к русской перейти?
← →
Piter © (2005-11-14 19:22) [15]Все, понял... Блин, а как же перевести теперь из UTF-8 в обычную ASCII?
← →
Piter © (2005-11-14 19:49) [16]Все, нашел. Очень просто - в JavaScript есть функция: decodeURI
← →
app © (2005-11-14 20:26) [17]Это URL encoded формат, при том два разных варианта - UTF и Unicode
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c