Путаница в Unicode и многобайтовых статьях - PullRequest
9 голосов
/ 05 марта 2010

По ссылке Статья Джоэла

Некоторые люди находятся под заблуждение, что Unicode просто 16-битный код, где каждый символ занимает 16 бит и, следовательно, есть 65 536 возможные персонажи. Это не, на самом деле, правильно.

Прочитав всю статью, я хочу сказать, что если кто-то скажет вам, что его текст написан в юникоде, вы не поймете, сколько памяти занимает каждый его персонаж. Он должен сказать вам: «Мой текст в кодировке Юникод закодирован в UTF-8», тогда только вы поймете, сколько памяти занимает каждый его персонаж.

Unicode = необязательно 2 байта для каждого символа


Однако, когда дело доходит до Статьи Project Code и Справка Microsoft , меня это смутило:

Microsoft:

Unicode - это 16-битный символ кодирование, обеспечивающее достаточное количество кодировок для всех языков. Все ASCII символы включены в Unicode как "расширенные" символы.


Код проекта:

Набор символов Unicode "широкий набор символов "(2 байта на символ) который содержит каждый символ доступно на любом языке, включая все технические символы и специальные публикация персонажей. Multibyte набор символов (MBCS) использует либо 1, либо 2 байта на символ

Unicode = 2 байта для каждого символа?

Может ли 65536 возможных символов представлять весь язык в этом мире?

Почему концепция кажется разной в сообществе веб-разработчиков и в сообществе разработчиков настольных систем?

Ответы [ 3 ]

11 голосов
/ 05 марта 2010

Давным-давно

  • Unicode имел только столько символов, сколько умещалось в 16 битах, и
  • UTF-8 не существует или не является де-факто кодировкой для использования.

Эти факторы привели к тому, что UTF-16 (или, скорее, то, что сейчас называется UCS-2) считалось синонимом «Unicode», потому что в конце концов это была кодировка , которая поддерживала весь Unicode.

Практически, вы увидите, что «Unicode» используется там, где подразумевается «UTF-16» или «UCS-2». Это историческая путаница, которую следует игнорировать, а не распространять. Юникод - это набор символов ; UTF-8, UTF-16 и UCS-2 - это разные кодировки .

(Разница между UTF-16 и UCS-2 заключается в том, что UCS-2 является истинным кодированием 16 битов на «символ» и поэтому кодирует только часть «BMP» (базовая многоязычная плоскость) Unicode, тогда как UTF-16 использует «суррогатные пары» (всего 32 бита) для кодирования символов выше BMP.)

2 голосов
/ 05 марта 2010

Чтобы расширить @ ответ Кевина:

Описание справки Microsoft довольно устарело, описывая состояние мира на временной шкале NT 3.5 / 4.0.

Вы также иногда увидите упоминания UTF-32 и UCS-4, чаще всего в мире * nix. UTF-32 - это 32-битная кодировка Unicode , подмножество UCS-4. Стандартное приложение Unicode # 19 описывает различия между ними.

Лучшим справочным материалом, описывающим различные модели кодирования, является Технический отчет Unicode # 17 Модель кодирования символов Unicode , особенно таблицы в разделе 4.

0 голосов
/ 21 октября 2011

Может ли 65536 возможных символов представлять весь язык в этом мире?

номер

Почему концепция кажется разной в сообществе веб-разработчиков и в сообществе разработчиков настольных компьютеров?

Поскольку документация Windows неверна. Мне понадобилось время, чтобы понять это. По крайней мере в двух местах MSDN сообщает, что Unicode - это 16-битная кодировка:

Одна из причин путаницы заключается в том, что в какой-то момент Unicode представлял собой 16-битную кодировку. От Википедия :

«Изначально стандарты Unicode и ISO 10646 предназначались для фиксированной ширины, а Unicode - 16 бит»

Другая проблема заключается в том, что сегодня в API-интерфейсах Windows строки, содержащие строковые данные в кодировке utf-16, обычно представлены с использованием массива широких символов, каждый из которых имеет длину 16 бит. Несмотря на это, API-интерфейсы Windows поддерживают суррогатные пары двух 16-битных символьных типов для представления одной кодовой точки Unicode.

Ознакомьтесь с этой записью в блоге для получения более подробной информации об источнике путаницы.

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