Шестигранное представление Евро Символа €

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

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

Спасибо

Ответ 1

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

Ответ 2

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

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


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

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

Ответ 3

Unicode очень скоро появился на рисунке для кодирования символов (около 1992-93). До этого 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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

Ответ 6

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