В чем разница между кодировками и кодировкой символов - PullRequest
10 голосов
/ 18 марта 2010

В чем разница между кодировками и кодировкой символов? Когда я скажу, что использую кодировку utf-8, тогда какой будет моя кодировка? Принимает ли он кодировку Юникод по умолчанию?

Ответы [ 5 ]

4 голосов
/ 18 марта 2010

UTF-8 - это кодировка набора символов Unicode. Поэтому, если вы используете UTF-8, набор символов Unicode, но вам вряд ли придется указывать это отдельно где-либо. Другое основное кодирование Unicode - UTF-16, который не помещается в 8-битные байтовые потоки, потому что он содержит ноль байтов. Если вы имеете дело с Юникодом в байтовой последовательности, он определенно кодируется как UTF-8.

За исключением Unicode, обычно считается, что наборы символов имеют единую фиксированную кодировку, а затем такие термины, как набор символов, кодировка, кодовая страница, кодирование, часто используются взаимозаменяемо или в зависимости от поставщика. Это небрежно, но не создает проблем во время выполнения.

Единственными возможными исключениями, которые я могу вспомнить, являются восточноазиатские: JIS и EUC первоначально определили несколько кодировок для одного и того же набора символов, но на практике сегодня каждая кодировка обрабатывается отдельно.

3 голосов
/ 18 марта 2010

Набор символов: определение, какой символ имеет какую числовую кодовую точку (ASCII, JIS, Unicode)

Кодировка: определение физического представления числовой кодовой точки (utf, ucs, shiftjis)

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

Согласно терминологии Unicode

  • ACR: репертуар абстрактных персонажей = набор символов для кодирования, например, некоторый алфавит или набор символов
  • CCS: набор кодированных символов = отображение из репертуара абстрактного символа в набор неотрицательных целых чисел
  • CEF: Форма кодировки символов = отображение из набора неотрицательных целых чисел, которые являются элементами CCS для набора последовательностей определенных единиц кода определенной ширины, например 32-разрядных целых чисел
  • CES: Схема кодирования символов = обратимое преобразование из набора последовательностей кодовых единиц (из одного или нескольких CEF в сериализованную последовательность байтов)
  • CM: Карта символов = отображение последовательностей членов абстрактного символьного репертуара в сериализованные последовательности байтов, соединяющих все четыре уровня в одной операции
  • TES: синтаксис передачи кодировки = обратимое преобразование закодированных данных, которое может содержать или не содержать текстовые данные

В старых протоколах, таких как MIME, используется "кодировка", когда они действительно означают "схема кодирования символов". Первоначально различные кодировки символов представляли собой независимый набор символов вместо подмножеств Unicode.

0 голосов
/ 18 марта 2010

Набор символов определяет соответствие между числами и символами. Почти все наборы символов говорят, что 65 - это A, и в целом согласны с отображением чисел до 127. Но они могут иметь разные позиции, когда речь идет о числах выше 127.

Есть много наборов символов

  • EBCDIC
  • Двухбайтовый набор символов
  • ANSI
  • Различные наборы символов OEM
  • Unicode, попытка создать единый набор символов, который включал бы каждую разумную систему письма на планете и некоторые выдуманные, например, клингон.

Когда вы произносите кодировку символов, вы говорите о том, как кодовая точка Unicode (символ) хранится внутри.

  • В кодировке UTF-8 каждая кодовая точка от 0 до 127 сохраняется в одном байте. Только кодовые точки 128 и выше сохраняются с использованием 2, 3, фактически до 6 байтов.
  • Есть нечто, называемое UTF-7, которое очень похоже на UTF-8, но гарантирует, что старший бит всегда будет равен нулю
  • Существуют сотни традиционных кодировок, которые могут правильно хранить только некоторые кодовые точки и изменять все другие кодовые точки в вопросительные знаки. Некоторые популярные кодировки английского текста: Windows-1252 (стандарт Windows 9x для западноевропейских языков) и ISO-8859-1, также известный как Latin-1 (также полезен для любого западноевропейского языка).
  • UTF 7, 8, 16 и 32 обладают хорошим свойством возможности правильно хранить любую кодовую точку.

Этот пост почти полностью основан на посте Джоэла Спольски, посвященном Unicode: Абсолютный минимум, который должен знать каждый разработчик программного обеспечения. Прочитайте это, чтобы получить лучшую идею.

...