В чем разница между Unicode и UTF-8? [дубликат]



этот вопрос уже есть ответ здесь:



считаем:



Alt text



Это правда, что unicode=utf16?



многие говорят, что Unicode-это стандарт, а не кодировка, но большинство редакторов поддерживают сохранение как Unicode кодирование на самом деле.

964   9  

9 ответов:

большинство редакторов поддерживают сохранение в кодировке "Unicode" на самом деле.

это неудачное неправильное название, совершенное Windows.

поскольку Windows использует кодировку UTF-16LE внутренне в качестве формата хранения памяти для строк Unicode, она считает это естественной кодировкой текста Unicode. В мире Windows есть строки ANSI (системная кодовая страница на текущей машине, при условии полной непереносимости) и есть строки Unicode (хранится внутри как UTF-16LE).

все это было разработано в первые дни Unicode, прежде чем мы поняли, что UCS-2 было недостаточно, и до того, как был изобретен UTF-8. Вот почему поддержка Windows для UTF-8 является всесторонней плохой.

эта ошибочная схема именования стала частью пользовательского интерфейса. Текстовый редактор, который использует поддержку кодирования Windows для предоставления диапазона кодировок, автоматически и ненадлежащим образом описывает UTF-16LE как "Unicode" и UTF-16BE, если таковые имеются, как "Unicode big-endian".

(другие редакторы, которые сами кодируют, например Notepad++, не имеют этой проблемы.)

Если это заставляет вас чувствовать себя лучше об этом, строки’ ANSI ' также не основаны на каком-либо стандарте ANSI.

как утверждает Расмус в своей статье "разница между UTF-8 и Unicode?" (фиксированная связь):

если задан вопрос: "в чем разница между UTF-8 и Юникод?", вы бы уверенно ответили коротким и точным ответ? В эти дни интернационализации все разработчики должны быть в состоянии сделать это. Я подозреваю, что многие из нас не понимают этих понятий как и следовало бы. Если вы чувствуете, что принадлежите к этой группе, вы должны прочтите это сверхкраткое введение в наборы символов и кодировки.

на самом деле, сравнение UTF-8 и Unicode похоже на сравнение яблок и апельсины:

UTF-8-это кодировка-Unicode-это символ набор

набор символов-это список персонажей с уникальными номерами (эти числа иногда называют "кодовыми точками"). Например, в набор символов Юникода, число для A составляет 41.

кодирование с другой стороны, это алгоритм, который переводит a список чисел в двоичном формате, так что он может быть сохранен на диске. Например UTF-8 будет переводить последовательность чисел 1, 2, 3, 4 следующим образом:

00000001 00000010 00000011 00000100 

наши данные теперь переведены в двоичный формат и теперь могут быть сохранены диск.

все вместе

скажем, приложение считывает с диска следующее:

1101000 1100101 1101100 1101100 1101111 

приложение знает, что эти данные представляют собой Строка Юникода, закодированная с помощью UTF-8 и должен показать это как текст пользователю. Первый шаг, это преобразовать двоичные данные в числа. Приложение использует алгоритм UTF-8 для декодирования данных. В этом случае декодер возвращает следующее:

104 101 108 108 111 

Так как приложение знает, что это строка Юникода, он может предположить, что каждый число представляет собой символ. Мы используем набор символов Юникода для переведите каждое число на соответствующий символ. В результате строка "привет".

вывод

поэтому, когда кто-то спрашивает вас: "в чем разница между UTF-8 и Юникод?"теперь вы можете уверенно ответить коротко и точно:

UTF-8 и Unicode нельзя сравнивать. UTF-8 это кодировка используется для преобразования чисел в двоичные данные. Unicode-это набор символов используется для перевода символов в цифры.

все не так просто.

UTF-16-это 16-битное кодирование переменной ширины. Просто называть что-то" Unicode "неоднозначно, так как" Unicode " относится к целый набор стандартов для кодировки. Юникод-это не кодировку!

http://en.wikipedia.org/wiki/Unicode#Unicode_Transformation_Format_and_Universal_Character_Set

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

здесь отображается много недоразумений. Юникод-это не an кодирование, но стандарт Unicode посвящен в основном кодированию в любом случае.

ISO 10646-это международный набор символов, о котором вы (вероятно) заботитесь. Он определяет отображение между набором именованных символов (например, "Латинская заглавная буква A" или "греческая строчная буква альфа") и набором кодовых точек (число, присвоенное каждому - например, 61 шестнадцатеричное и 3B1 шестнадцатеричное для этих двух соответственно; для кодовых точек Unicode стандартная нотация будет U+0061 и U+03B1).

в свое время Unicode определил свой собственный набор символов, более или менее конкурирующий с ISO 10646. Это был 16-битный набор символов, но это было не UTF-16; он был известен как UCS-2. Он включал довольно спорный метод, чтобы попытаться свести количество необходимых символов к минимуму (объединение Хань-в основном лечение китайских, японских и корейских символов, которые были совсем немного похоже, как один и тот же персонаж).

с тех пор консорциум Unicode молчаливо признал, что это не сработает, и теперь сосредоточьтесь в первую очередь на способах кодирования набора символов ISO 10646. Основными методами являются UTF-8, UTF-16 и UCS-4 (он же UTF-32). Те (за исключением кодировке UTF-8), также ЛЕ (с прямым порядком байтов) и (обратный порядок байтов) вариантов.

сам по себе "Unicode" может ссылаться почти на любой из вышеперечисленных (хотя мы, вероятно, можем исключить другие что он показывает явно, например UTF-8). Безусловное использование "Unicode", вероятно, чаще всего происходит в Windows, где он почти наверняка будет относиться к UTF-16. Ранние версии Windows NT приняли Unicode, когда UCS-2 был текущим. После того, как UCS-2 был объявлен устаревшим (вокруг Win2k, если память служит), они переключились на UTF-16, который наиболее похож на UCS-2 (на самом деле он идентичен для символов в "базовой многоязычной плоскости", которая охватывает много, включая все символы для большинства западноевропейские языки.)

UTF-16 и UTF-8 как кодировку Юникод. Они и Unicode; один не больше Unicode чем другие.

Не позволяйте неудачный исторический артефакт от Microsoft запутать вас.

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

источник:

http://www.differencebetween.net/technology/difference-between-unicode-and-utf-8/

в дополнение к комментарию Trufa, Unicode явно не является UTF-16. Когда они впервые изучали Unicode, предполагалось, что 16-разрядного целого числа может быть достаточно для хранения любого кода, но на практике это оказалось не так. Однако UTF-16 является еще одной допустимой кодировкой Unicode-наряду с 8-битными и 32 - битными вариантами-и я считаю, что это кодировка, которую Microsoft использует в памяти во время выполнения в операционных системах, производных от NT.

давайте начнем с того, что данные хранятся в виде байтов; Unicode-это набор символов, где символы сопоставляются с кодовыми точками (уникальными целыми числами), и нам нужно что-то перевести эти данные кодовых точек в байты. Вот где UTF-8 поставляется в так называемой кодировке-просто!

Это странно. Юникод-это стандарт, а не кодировка. Поскольку можно указать endianness, я думаю, что это эффективно UTF-16 или, может быть, 32.

откуда взялось это меню?

Comments

    Ничего не найдено.