2011-01-09 5 views
7

Я использовал XVI32 (Hex Editor), чтобы получить шестнадцатеричное представление символа евро, и оно дает мне значение 80.
Другой сайт: http://www.string-functions.com/string-hex.aspx делает то же самое.
Я не могу понять, почему шестнадцатеричное представление составляет 80 вместо 0x20AC. Этот 0X80 дает 128 в десятичной форме, и если я использую Alt + 0128, он фактически выдает символ евро.Шестигранное представление Евро Символ €

Не могли бы кто-нибудь проливать свет на то, что может быть логикой этого преобразования от преобразования строки в шестнадцатеричный?

Благодаря

ответ

2

128 в десятичной системе счисления в шестнадцатеричную 80.

изменить: и 0x20AC будет 8364 в десятичной системе.


Согласно this странице 128 неправильно для UTF-8 (или любой другой юникода), но верно для окон-1252 (и изо-8859-15 также имеет его, хотя в других местах).

Обычно, если вы используете в Windows клавиатурный ключ с надписью euro, необработанный октет 128 - это то, что вы на самом деле производят и вставляете в файл ... Такой метод формально корректен, если документ сопровождается информацией, которая указывает кодировку, в которой данные сопоставляются с данным символом. Это означало бы, например, кодировку windows-1252 или iso-8859-15, которая должна быть указана в заголовках HTTP.

+1

ISO-8859-15 имеет '€', но в 0xA4, не 0x80. – dan04

+0

@ dan04 - спасибо за исправление. – Oded

7

Кодировка символов (или кодировка) отображает символы в последовательность байтовых значений. Ваша кодировка - windows-1252, которая кодирует символ евро в виде одиночного шестнадцатеричного байта 0x80 (который равен 128 в десятичной форме, как говорит Одед). Каждая кодировка кодирует символы, отличные от ASCII, по-разному; в этом 0x80 нет ничего принципиально «правильного» или «неправильного».

+0

Возможно, это не так "неправильно", но было бы намного проще *, если бы нам не пришлось иметь дело с этими устаревшими кодировками. – dan04

+0

В некотором смысле да, в некотором роде нет. Легче иметь символы постоянной ширины, которые дают «устаревшие» кодировки, такие как windows-1252, ногами более универсальными, «современными», такими как UTF-8. И даже среди стандартных кодировок, которые напрямую кодируют коды кода Unicode (UTF-8, UTF-16BE, UTF-16LE, UCS-4 и т. Д.), Каждый из них приводит к другой последовательности байтов для каждого символа ... http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings – dkarp

+0

Ты просто спаси меня !! Спасибо ! – Superdrac

0

Я предполагаю, что на вашем компьютере (и на этом сайте) локальная кодовая страница такова, что код 128 сопоставляется с символом евро. На моей машине Alt + 0128 отображает еврейский символ Alef, потому что он настроен на другую кодовую страницу.

Вы можете увидеть код Unicode для Евро, набрав

javascript:alert("€".charCodeAt(0)) 

в адресной строке браузера.

1

Причины вы видите различные результаты, является кодировкой символов:

Числа 0x20AC является юникод для элемента кодом символа евро. В зависимости от используемой кодировки вы получаете разные коды. В Windows у вас обычно есть что-то вроде cp1252 или около того для немецкого, например, что очень похоже на кодировку ISO8859-1, и что один содержит символ евро в 0x80.

Так, какой шестнадцатеричный код, который вы получаете для символа евро, зависит от кодировки, используемой в данных, на которые вы смотрите. Вы можете посмотреть на консорциуме Юникода при условии файлов кодирование, чтобы увидеть некоторые из различных кодировок, доступных, посмотреть на отображения можно ознакомиться здесь: http://unicode.org/Public/MAPPINGS/

0

0x20AC должен быть правильной, так как символ евро (расширенный) символ Юникода.
Тот факт, что нажатие клавиши Alt + 0128 создает символ евро, не имеет к этому никакого отношения (вы, вероятно, делаете это в окнах? Это конкретная вещь для Windows) 0x80 или 128 не является допустимым кодом html (поведение не определено) : http://www.ascii.cl/htmlcodes.htm
подробнее о: http://www.cs.tut.fi/~jkorpela/html/euro.html

2

Unicode пришел очень поздно в изображении для кодирования символов (около 1992-93). До этого OEM использовал свою специфическую кодировку. В среде Windows у вас много кодировок, специфичных для локали. Поэтому, согласно кодировке Window Windows: Western, вы получаете 0x80 для евро. Однако Unicode охватывает все валютные символы в блоках валютных символов BMP (U + 20A0 до U + 20CF). Поэтому в соответствии с Unicode у вас есть U + 20AC для символа валюты евро и, согласно кодировке Windows, у вас есть 0x80 для того же самого.

Чтобы увидеть разницу, на компьютере с Windows откройте файл charmap.exe и проверьте расширенный вид. Наборы символов выберите Windows: Western. Там вы увидите причину.

Для получения дополнительной информации см https://en.wikipedia.org/wiki/Windows-1252

Смежные вопросы