Шестнадцатеричное представление символа евро €

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

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

Спасибо


person Rahul    schedule 09.01.2011    source источник


Ответы (6)


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

person dkarp    schedule 09.01.2011
comment
Возможно, это не так, но было бы намного проще, если бы нам не приходилось иметь дело с этими устаревшими кодировками символов. - person dan04; 09.01.2011
comment
В некотором смысле да, в некотором смысле нет. Легче иметь символы постоянной ширины, что дает устаревшим кодировкам, таким как windows-1252, ногу по сравнению с более универсальными, современными, такими как UTF-8. И даже среди стандартных кодировок, которые напрямую кодируют кодовые точки Unicode (UTF-8, UTF-16BE, UTF-16LE, UCS-4 и т. Д.), Каждый из них приводит к разной последовательности байтов для каждого символа ... en.wikipedia.org/wiki/Comparison_of_Unicode_encodings - person dkarp; 09.01.2011
comment
Просто спаси меня !! Спасибо ! - person Superdrac; 27.05.2014
comment
В MS-SQL. Если объявлена ​​переменная VARCHAR, в ней хранится символ «€» и выполняется приведение к VARBINARY, результатом будет 0x80, но если типом является NVARCHAR, результатом будет 0xAC20. Я проголосовал за ваш ответ и за вопрос. - person ; 28.05.2019

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

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


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

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

person Oded    schedule 09.01.2011
comment
В ISO-8859-15 есть «€», но это 0xA4, а не 0x80. - person dan04; 09.01.2011

Юникод появился очень поздно для кодирования символов (примерно в 1992–1993 годах). До этого OEM использовал свою кодировку. В среде Windows у вас есть много кодировок, специфичных для локали. Следовательно, в соответствии с кодировкой 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

person Ravi Tiwari    schedule 12.08.2015

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

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

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

person schlenk    schedule 09.01.2011

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

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

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

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

person Amnon    schedule 09.01.2011

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

person lazyboy    schedule 09.01.2011