2015-08-27 2 views
0

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

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

a € b 

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

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

ИТАК:

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)?

ответ

2

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

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

Возможно, вы захотите начать здесь: What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text.

+0

Ах, вы правы, я неправильно установил кодировку в Vim. Спасибо за информацию и помощь :) – DBedrenko