Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.031 c
1-1131266070
FBuilder
2005-11-06 11:34
2005.12.04
Panels and Splitters


6-1124814288
student_ds
2005-08-23 20:24
2005.12.04
Просмотр директорий на FTP


14-1131537258
TButton
2005-11-09 14:54
2005.12.04
Системные Сервисы


14-1130429605
FeeR
2005-10-27 20:13
2005.12.04
Загрузочный сектор


1-1131267819
x.pro
2005-11-06 12:03
2005.12.04
Создание объектов.