Как знак евро может иметь значение выше 0xFF в Win-1252 и Latin9?

В моих знаниях о кодировках, кодировках и т. д. есть пробел. /a> и код ISO/IEC 8859-15 (латиница-9) - страниц значение знака евро (€) задается как 0x20AC, что равно 8364 в десятичном виде! Но как это может быть, если идея состоит в том, что любой из символов в этой кодировке должен помещаться в один байт без знака (т.е. максимальное значение может быть 255)? US-ASCII принимает значения 0-127, а 128-255 - это то, где были различия между разными кодировками символов.

Когда я ввожу текст в текстовый редактор (vim):

a € b

И сохраните его в файл с кодировкой «latin9». Я вижу этот файл, состоящий из следующих байтов:

$ xxd euro-file.txt
0000000: 6120 e282 ac20 620a                      a ... b.

OK so:

0x61 = 'a' character
0x20 = space character
0xE282 = ???
0xAC20 = This is the value of the Euro symbol, but the bytes are backwards; the reference said the value should be 0x20AC
0x62 = 'b' character

Может кто-нибудь объяснить, как символ евро может иметь значение выше 255? Почему записанные байты для символа евро задом наперед (0xAC20 вместо 0x20AC)?


person DBedrenko    schedule 27.08.2015    source источник


Ответы (1)


Символ просто обозначается его кодовой точкой Unicode, то есть U+20AC. Он не обозначает значение байта в таблицах кодировки Latin-9/CP1252. Это просто указано таким образом, по-видимому, чтобы устранить неоднозначность, какой именно символ имеется в виду; таблица Unicode — довольно хороший канонический справочник.

Тот файл, который вы просматриваете xxd, по-видимому, закодирован в UTF-8, где "€" закодирован с использованием байтов E2 82 AC.

Вы можете начать здесь: Что абсолютно необходимо знать каждому программисту о кодировках и наборах символов для работы с текстом.

person deceze♦    schedule 27.08.2015
comment
Ах, вы правы, я неправильно установил кодировку в Vim. Спасибо за информацию и помощь :) - person DBedrenko; 27.08.2015