Шестнадцатеричное представление символа евро € - PullRequest
9 голосов
/ 09 января 2011

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

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

Ответы [ 6 ]

8 голосов
/ 09 января 2011

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

2 голосов
/ 12 августа 2015

Юникод появился очень поздно на картинке для кодирования символов (около 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

2 голосов
/ 09 января 2011

128 в десятичном виде - это 80 в шестнадцатеричном.

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


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

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

1 голос
/ 09 января 2011

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

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

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

0 голосов
/ 09 января 2011

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

0 голосов
/ 09 января 2011

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

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

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

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

...