2012-01-04 1 views
6

Почему символ степени отличается от UTF-8 от юникода?Почему символ степени отличается от UTF-8 от unicode?

По: http://www.utf8-chartable.de/ и http://www.fileformat.info/info/unicode/char/b0/index.htm

Юникода B0 но UTF-8 является C2 B0 Каким образом ??

+0

Есть тысячи символов, представление которых отличается от UTF-8 и UTF-16. Почему вы считаете, что символ степени заслуживает специального лечения? –

+5

Вам нужно понять разницу между Unicode и различными кодировками. Прочтите ссылки, опубликованные пользователями. – tripleee

+0

@MikeNakis: Я считаю, что * все * Кодовые точки Unicode имеют разные представления в UTF-8 и UTF-16. –

ответ

15

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

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

110xxxxx 10xxxxxx 

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

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

11000010 10110000 

В шестнадцатеричном, это 0xC2 0xB0.

+1

И, что важно, это просто другое представление одной и той же кодовой точки Юникода, U + 00B0. UTF-16 использует 0x00 0xB0 (big-endian) или 0xB0 0x00 (little-endian), но UTF-8 использует 0xC2 0xB0 (без энсина). –

+0

Ссылка, которую вы предоставляете, очень полезна ... Спасибо –

+0

@JonathanLeffler «Нет сущности» Не правильная терминология, но смешно –

4

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

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

4

UTF-8 - это одна кодировка Юникода. 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, снова в зависимости от сущности (возможно, возможны другие заказы).

1

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

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

UTF-8 needs C2 80 to represent U+0080

Обратите внимание, как это необходимо использовать два байта для кодирования одного символа. Теперь прочитайте принятый ответ от NPE.

+0

Если пользователь не видит веб-сайт, он показывает «0x7F» (DELETE) как UTF-8: '7F' и' 0x80' как UTF-8: 'C2 80' –

Смежные вопросы