Шестнадцатеричное представление символа евро €
Я использовал XVI32 (Hex Editor), чтобы получить шестнадцатеричное представление символа евро, и оно дает мне значение 80.
Другой сайт: http://www.string-functions.com/string-hex.aspx делает то же самое.
Я не могу понять, почему шестнадцатеричное представление 80 вместо 0x20AC. Это 0X80 дает 128 в десятичном виде, и если я использую Alt+0128, это фактически производит символ евро.
Может ли кто-нибудь пролить свет на то, что может быть логикой в этом преобразовании из преобразования строки в гекс?
Спасибо
6 ответов
Кодировка символов (или кодировка) отображает символы в последовательность байтовых значений. Ваша кодировка windows-1252
, который кодирует символ евро в виде одиночного шестнадцатеричного байта 0x80 (который является 128 в десятичном виде, как говорит Одед). Каждый набор символов по-разному кодирует символы, не входящие в ASCII; в этом 0x80 нет ничего принципиально "правильного" или "неправильного".
128 в десятичном виде - это 80 в шестнадцатеричном.
edit: и 0x20AC будет 8364 в десятичном виде.
Согласно этой странице, 128 неверно для UTF-8 (или любого другого юникода), но верно для windows-1252 (и iso-8859-15 также имеет его, хотя и в другом месте).
Как правило, если вы используете в Windows клавиатуру, помеченную знаком евро, то необработанный октет 128 - это то, что вы фактически производите и вставляете в файл.... Такой метод формально корректен, если документ сопровождается информацией, которая указывает кодировку, в которой данные отображаются на соответствующий символ. Это будет означать кодирование windows-1252 или iso-8859-15 соответственно, которое должно быть указано в заголовках HTTP.
Юникод появился очень поздно в картине для кодирования символов (около 1992-93). До этого OEM использовал свою специфическую кодировку. В среде Windows у вас есть много кодировки, специфичные для локали. Следовательно, согласно кодировке Windows Windows: Western, вы получаете 0x80 за евро. Однако Юникод охватывает все символы валюты в блоках символов валюты BMP (от U+20A0 до U+20CF). Поэтому в соответствии с Unicode у вас есть U+20AC для символа валюты евро, а в соответствии с кодировкой Windows, у вас есть 0x80 для того же.
Чтобы увидеть разницу, на машине с Windows откройте charmap.exe и проверьте расширенный вид. Из набора символов выберите Windows: Western. Там вы увидите причину.
Для получения дополнительной информации см. https://en.wikipedia.org/wiki/Windows-1252
Причина, по которой вы видите разные результаты, заключается в кодировке символов:
Число 0x20AC - это кодовая точка Unicode для символа евро. В зависимости от используемой кодировки вы получаете различные коды. В Windows у вас обычно есть что-то вроде cp1252 или около того, например, для немецкого языка, что очень похоже на кодировку ISO8859-1 и содержит символ евро в 0x80.
Итак, какой шестнадцатеричный код вы получите для символа евро, зависит от кодировки, используемой в данных, которые вы просматриваете. Вы можете взглянуть на предоставленные unicode.org файлы кодировки, чтобы увидеть некоторые из различных доступных кодировок, взгляните на сопоставления, доступные здесь: http://unicode.org/Public/MAPPINGS/
0x20AC должно быть правильным, поскольку символ евро является (расширенным) символом Юникода.
Тот факт, что нажатие Alt+0128 приводит к появлению символа евро, не имеет к этому никакого отношения (вы, вероятно, делаете это в Windows? Тогда это специфично для Windows)
0x80 или 128 не является допустимым HTML-кодом (поведение не определено): http://www.ascii.cl/htmlcodes.htm
Узнайте больше на: http://www.cs.tut.fi/~jkorpela/html/euro.html
Я предполагаю, что на вашем компьютере (и на этом сайте) локальная кодовая страница такова, что код 128 отображается на символ евро. На моей машине Alt+0128 отображается на ивритский символ Alef, потому что он настроен на другую кодовую страницу.
Вы можете увидеть код Unicode для евро, набрав
javascript:alert("€".charCodeAt(0))
в адресной строке вашего браузера.