2009-03-31 12 views
281

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

В каком формате они могут помочь программистам?

+5

очень родственный: [UTF-8 vs Unicode] (http://stackoverflow.com/questions/643694/utf-8-vs-unicode) –

+0

Лучший сайт для ссылки: http: // msdn. microsoft.com/en-us/library/dd374081(VS.85).aspx – RamSri

+0

http://www.tugay.biz/2016/07/what-is-ascii-and-unicode-and-character.html –

ответ

390

Спускаясь список:

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

Есть еще на my Unicode page и tips for debugging Unicode problems.

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

+0

Я действительно думаю об ANSI как [Code Page 437] (http://en.wikipedia.org/wiki/Code_page_437Code), так как это было использовано ANSI Art , Тем не менее, я не думаю, что это доступно в ASP.Net – lordscarlet

+2

Термин «ANSI» применительно к 8-разрядным кодовым страницам Microsoft является неправильным. Они были основаны на проектах, представленных для стандартизации ANSI, но ANSI сама по себе не стандартизировала их. Windows-1252 (кодовая страница, обычно называемая «ANSI») похожа на ISO 8859-1 (Latin-1), за исключением того, что Windows-1252 имеет печатные символы в диапазоне 0x80..0x9F, где ISO 8859-1 имеет управляющие символы в этом диапазоне. Юникод также имеет управляющие символы в этом диапазоне. https://en.wikipedia.org/wiki/Windows_code_page –

+0

@JonSkeet, у меня есть несколько веб-страниц, которые отправляют сообщения электронной почты. В настоящее время они используют UTF8. Должен ли я подумать об изменении их на UTF7? – jp2code

53

Некоторое чтение, чтобы вы начали на кодировок: Joel on Software: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

Кстати - ASP.NET не имеет ничего общего с ним. Кодировки универсальны.

+1

очень информативное чтение, спасибо! –

+4

Ответил здесь через 6 лет после написания статьи. Я прочитал его через 8 лет после написания сообщения. 14 лет спустя, и это все еще хорошее чтение. Это больше половины моей жизни назад. Невероятный. –

+1

Удивительная статья!Приятно видеть, что автор делал другие хорошие вещи, прежде чем создавать stackoverflow ... –

 Смежные вопросы

  • Нет связанных вопросов^_^