Какая разница между Unicode и UTF-8?

Рассмотрим:

Alt text

Верно ли, что unicode=utf16?

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

+133
источник поделиться
9 ответов

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

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

Поскольку Windows использует внутреннюю кодировку UTF-16LE как формат памяти для строк 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.

+125
источник

Как говорит Расмус в своей статье Разница между UTF-8 и Unicode? (ссылка исправлена):

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

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

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

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

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

00000001 00000010 00000011 00000100 

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

Теперь все вместе

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

1101000 1100101 1101100 1101100 1101111 

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

104 101 108 108 111 

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

Заключение

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

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

+425
источник
другие ответы

Связанные вопросы


Похожие вопросы

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

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

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

и, конечно же, обязательный Joel On Software - абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о юникодном и символьном наборах (без отговорок!).

+24
источник

Здесь много непонимания. Unicode не является кодировкой, но стандарт Unicode в основном посвящен кодированию.

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

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

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

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

+13
источник

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

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

+4
источник

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

Источник:

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

+3
источник

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

+3
источник

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

Откуда это меню предоставляется?

+1
источник

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

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос