Руководство манекена по Unicode - PullRequest
12 голосов
/ 21 сентября 2009

Может ли кто-нибудь дать мне краткое определение

  • Unicode
  • UTF7
  • UTF8
  • UTF16
  • UTF32
  • Кодовые
  • Чем они отличаются от Ascii / Ansi / Windows 1252

Я не за ссылками на Википедию или невероятными подробностями, просто краткая информация о том, как и почему возникли огромные вариации в Юникоде, и , почему вам следует быть программистом.

Ответы [ 6 ]

12 голосов
/ 22 сентября 2009

Если вы хотите действительно краткое введение: Юникод за 5 минут

Или, если вы после однострочников:

  • Unicode: сопоставление символов с целыми числами («кодовыми точками») в диапазоне от 0 до 1 114 111; охватывает почти все используемые письменные языки
  • UTF7: кодирование точек кода в поток байтов с очисткой старшего бита; в общем не использовать
  • UTF8: кодирование кодовых точек в поток байтов, где каждый символ может представлять один, два, три или четыре байта для представления; должен быть ваш основной выбор кодировки
  • UTF16: кодирование кодовых точек в поток слов (16-битные единицы), где каждый символ может принимать одно или два слова (два или четыре байта) для представления
  • UTF32: кодирование точек кода в поток 32-битных блоков, где каждый символ занимает ровно одну единицу (четыре байта); иногда используется для внутреннего представления
  • Кодовые страницы: система в DOS и Windows, в которой символы назначаются целым числам, и соответствующая кодировка; каждый охватывает только подмножество языков. Обратите внимание, что эти назначения обычно отличаются от назначений Unicode
  • ASCII: очень распространенное назначение символов целым числам и прямое кодирование в байты (все старшие биты сбрасываются); присвоение является подмножеством Unicode, а кодирование - подмножеством UTF-8
  • ANSI: тело стандарта
  • Windows 1252: Часто используемая кодовая страница; это похоже на ISO-8859-1 или Latin-1, но не то же самое, и эти два часто путают

Почему тебя это волнует? Потому что, не зная набора символов и используемой кодировки, вы на самом деле не знаете, какие символы представляет данный поток байтов. Например, байт 0xDE может кодировать

  • Þ (шип латинского алфавита)
  • fi (ЛАТИНСКАЯ МАЛАЯ ЛИГАТУРА FI)
  • ή (греческое небольшое письмо с тоносом)
  • или 13 других символов, в зависимости от используемой кодировки и набора символов.
7 голосов
/ 21 сентября 2009

Помимо часто упоминаемой Джоэл, у меня есть моя собственная статья , которая рассматривает ее с точки зрения .NET, просто для разнообразия ...

4 голосов
3 голосов
/ 21 сентября 2009

Да, я кое-что понял, но это может быть неправильно, однако это помогло мне понять это.

Давайте просто возьмем текст. Он хранится в памяти компьютера в виде последовательности байтов, кодовая страница - это просто таблица сопоставления между байтами и символами, которые вы и я читали. Итак, что-то вроде блокнота идет вместе с его кодовой страницей и переводит байты на экран, и вы видите кучу мусора, перевернутых вопросительных знаков и т. Д. Это не означает, что ваши данные искажаются только из-за того, что приложение, читающее байты, не использует кодовая. Некоторые приложения умнее обнаруживают правильную кодовую страницу для использования, чем другие, и некоторые потоки байтов в памяти содержат спецификацию, которая обозначает метку порядка байтов, и это может объявить правильную кодовую страницу для использования.

UTF7, 8 16 и т. Д. - это просто разные кодовые страницы, использующие разные форматы.

Один и тот же файл, хранящийся в виде байтов с использованием разных кодовых страниц, будет иметь другой размер файла, поскольку байты хранятся по-разному.

Они также на самом деле не отличаются от Windows 1252, поскольку это просто еще одна кодовая страница.

Чтобы получить более разумный ответ, воспользуйтесь одной из ссылок.

2 голосов
/ 21 сентября 2009

Другие уже указали достаточно хороших ссылок для начала. Я не перечисляю настоящее руководство Dummy, а скорее некоторые ссылки со страницы Консорциума Unicode. На страницах Консорциума Unicode вы найдете еще несколько причин для использования различных кодировок.

FAQ по Unicode - это достаточно хорошее место, чтобы ответить на некоторые (не все) ваши запросы.

Более краткий ответ о том, почему существует Unicode, представлен в разделе Новичок на сайте Unicode :

Unicode предоставляет уникальный номер для каждый персонаж, независимо от того, что Платформа, независимо от того, что программа, не важно на каком языке.

Что касается технических причин использования UTF-8, UTF-16 или UTF-32, ответ лежит в Техническом введении в Unicode :

UTF-8 популярен для HTML и подобных протоколы. UTF-8 - это способ преобразование всех символов Unicode в кодировку переменной длины байт. У него есть то преимущество, что Unicode символы, соответствующие знакомый набор ASCII имеет то же самое значения байтов как ASCII, и этот Unicode символы, преобразованные в UTF-8, могут использоваться со многими существующими программами без обширных программ переписывает.

UTF-16 популярен во многих средах что нужно сбалансировать эффективный доступ персонажам с экономным использованием место хранения. Это достаточно компактно и подходят все используемые персонажи в одну 16-битную кодовую единицу, в то время как все остальные персонажи доступны через пары 16-битных кодовых единиц.

UTF-32 популярен там, где пространство памяти Не беспокойся, но фиксированная ширина, одинарная Кодовая единица доступа к символам желательно. Каждый символ Юникода закодированы в одном 32-битном кодовом блоке при использовании UTF-32.

Все три формы кодирования должны быть максимально 4 байта (или 32-битных) данных для каждого характер.

Общее правило большого пальца заключается в использовании UTF-8, когда преобладающие языки, поддерживаемые вашим приложением, говорят на западе от реки Инд, UTF-16 для противоположного (к востоку от Инда) и UTF-32, если вас это касается об использовании символов с единым хранилищем.

Кстати, UTF-7 не является стандартом Unicode и был разработан в основном для использования в почтовых приложениях.

...