Руководство манекена по Unicode

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

  • Unicode
  • UTF7
  • utf8 в
  • формате UTF16
  • кодировках utf32
  • кодовые страницы
  • как они отличаются от Ascii / Ansi / Windows 1252

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

6 ответов



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

или если вы после одного-вкладыши:

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

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

  • Þ (ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА THORN)
  • fi (Латинская малая лигатура FI)
  • ή (греческая маленькая буква эта с ТОНОСОМ)
  • или 13 других символов, в зависимости от используемой кодировки и набора символов.

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



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

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

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

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

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

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


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

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

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

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

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

UTF-8 популярен для HTML и подобных протоколы. UTF-8-это способ преобразование всех символов Юникода в кодировку переменной длины байты. Оно имеет преимущества которые Символы юникода, соответствующие знакомый набор 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 и был разработан в основном для использования в почтовых приложениях.