Почему символ степени отличается от UTF-8 от Unicode? - PullRequest
9 голосов
/ 04 января 2012

Почему символ степени отличается от UTF-8 от Unicode?

Согласно: http://www.utf8 -chartable.de / и http://www.fileformat.info/info/unicode/char/b0/index.htm

Unicode - B0 , но UTF-8 - C2 B0 Как получилось! ??

Ответы [ 4 ]

21 голосов
/ 04 января 2012

UTF-8 - это способ кодирования символов UTF с использованием переменного количества байтов (количество байтов зависит от кодовой точки).

Кодовые точки между U + 0080 и U + 07FF используют следующую 2-байтовую кодировку :

110xxxxx 10xxxxxx

где x представляет биты кодируемой кодовой точки.

Давайте рассмотрим U + 00B0. В двоичном коде 0xB0 равно 10110000. Если подставить биты в вышеупомянутый шаблон, получится:

 11000010 10110000

В гексах это 0xC2 0xB0.

4 голосов
/ 04 января 2012

UTF-8 - это одна кодировка Unicode.UTF-16 и UTF-32 являются другими кодировками Unicode.

Unicode определяет числовое значение для каждого символа;Символ степени оказывается 0xB0, или 176 в десятичном виде.Unicode не определяет способ представления этих числовых значений.

UTF-8 кодирует значение 0xB0 в виде двух последовательных октетов (байтов) со значениями 0xC2 0xB0.

UTF-16 кодируетто же значение либо как 0x00 0xB0, либо как 0xBo 0x00, в зависимости от порядкового номера.

UTF-32 кодирует его как 0x00 0x00 0x00 0xB0 или как 0xB0 0x00 0x00 0x00, опять же, в зависимости от порядкового номера (я полагаю, возможны другие порядки).

4 голосов
/ 04 января 2012

Unicode (UTF-16 и UTF-32) использует кодовую точку 0x00B0 для этого символа.UTF-8 не допускает символы со значениями выше 127 (0x007F), так как старший бит каждого байта зарезервирован для указания того, что этот конкретный символ фактически является многобайтовым.

Basic 7-бит ASCII отображается непосредственно на первые 128 символов UTF-8.Любые символы, значения которых превышают 127 десятичных (7F шестнадцатеричный), должны быть "экранированы" путем установки старшего бита и добавления 1 или более дополнительных байтов для описания.

1 голос
/ 16 марта 2014

Ответы из NPE, Марка и Кейта хороши и превосходят мои знания по этой теме. Тем не менее мне пришлось прочитать их пару раз, прежде чем я понял, о чем идет речь. Затем я увидел эту веб-страницу, которая сделала ее «щелчком» для меня.

В http://www.utf8 -chartable.de / вы можете увидеть следующее:

UTF-8 needs C2 80 to represent U+0080

Обратите внимание, как необходимо использовать ДВА байта для кодирования ОДНОГО символа. Теперь прочитайте принятый ответ от NPE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...