Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
2-1132149733
IfBeginThenEnd
2005-11-16 17:02
2005.12.04
Частотные срезы


5-1114171654
MishaN
2005-04-22 16:07
2005.12.04
Focused on RePaint


4-1128426111
Roughneck
2005-10-04 15:41
2005.12.04
Как получить Handle первичного потока зная только ID процесса


2-1131870012
leeroy
2005-11-13 11:20
2005.12.04
help...


3-1129731138
Yrka
2005-10-19 18:12
2005.12.04
Как добавить поле выбора?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский