Различия в формате Юникод, UTF, ASCII, ANSI - PullRequest
325 голосов
/ 31 марта 2009

В чем разница между кодировками Unicode, UTF8, UTF7, UTF16, UTF32, ASCII и ANSI?

Чем они полезны для программистов?

Ответы [ 2 ]

439 голосов
/ 31 марта 2009

Спускаясь по вашему списку:

  • " Unicode " не является кодировкой, хотя, к сожалению, во многих документах ее неточно используют для ссылки на любую кодировку Unicode, используемую конкретной системой по умолчанию. В Windows и Java это часто означает UTF-16; во многих других местах это означает UTF-8. Правильно, Unicode относится к самому абстрактному набору символов, а не к какой-либо конкретной кодировке.
  • UTF-16 : 2 байта на «кодовую единицу». Это собственный формат строк в .NET, и обычно в Windows и Java. Значения за пределами Основной многоязычной плоскости (BMP) кодируются как суррогатные пары. (Они используются сравнительно редко - это хорошая работа, так как очень немногие разработчики понимают их правильно, я подозреваю. Я очень сомневаюсь, что я делаю.)
  • UTF-8 : Кодирование переменной длины, 1-4 байта на кодовую точку. Значения ASCII кодируются как ASCII, используя 1 байт.
  • UTF-7 : Обычно используется для шифрования почты. Скорее всего, если вы думаете, что вам это нужно, и вы не делаете почту, вы ошибаетесь. (Это просто мой опыт публикации сообщений в группах новостей и т. Д. - за пределами почты, на самом деле это вообще не так широко используется.)
  • UTF-32 : исправлено кодирование ширины с использованием 4 байтов на кодовую точку. Это не очень эффективно, но облегчает жизнь вне BMP. У меня есть класс .NET Utf32String как часть моей библиотеки MiscUtil , если вы когда-нибудь захотите. (Заметьте, это не очень тщательно проверено.)
  • ASCII : однобайтовое кодирование только с использованием младших 7 бит. (Юникод кодовые точки 0-127.) Без акцентов и т. Д.
  • ANSI: Нет единой фиксированной кодировки ANSI - их много. Обычно, когда люди говорят «ANSI», они означают «локаль / кодовую страницу по умолчанию для моей системы», которая получается через Encoding.Default и часто Windows-1252 , но может быть и другими локалями .

На моей странице Unicode и приведены советы по устранению неполадок Unicode .

.

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

62 голосов
/ 31 марта 2009

Некоторое чтение, чтобы вы начали изучать кодировки символов: Джоэл о программном обеспечении: Абсолютный минимум Каждый разработчик программного обеспечения должен абсолютно точно знать о Unicode и наборах символов (без оправданий!)

Кстати - ASP.NET не имеет к этому никакого отношения. Кодировки универсальные.

...