Unicode, Unicode Big Endian или UTF-8? В чем разница? Какой формат лучше?

26139
Ashwin Nanjappa

Когда я пытаюсь сохранить текстовый файл с неанглийским текстом в Блокноте, у меня появляется возможность выбора между Unicode, Unicode Big Endian и UTF-8 . В чем разница между этими форматами?

Предполагая, что я не хочу обратной совместимости (со старыми версиями ОС или приложениями), и меня не волнует размер файла, какой из этих форматов лучше?

(Предположим, что текст может быть на таких языках, как китайский или японский, в дополнение к другим языкам.)

Примечание. Из ответов и комментариев ниже видно, что в языке Блокнот Unicode - это UTF-16 (Little Endian), Unicode - это Big UTF-16 (Big Endian), а UTF-8 - это UTF-8.

19
http://www.utf8everywhere.org/ phuclv 9 лет назад 2

6 ответов на вопрос

19
Jason Baker

Не знаю. Что лучше: пила или молоток? :-)

Юникод не UTF

В этой статье есть немного больше, что касается темы:

  • UTF-8 фокусируется на минимизации размера байта для представления символов из набора ASCII (представление переменной длины: каждый символ представлен от 1 до 4 байтов, а все символы ASCII помещаются на 1 байт). Как говорит Джоэл:

«Посмотрите на все эти нули!» - сказали они, поскольку были американцами и смотрели текст на английском языке, в котором редко использовались кодовые точки выше U + 00FF. Также они были либеральными хиппи в Калифорнии, которые хотели сохранить (насмешливо). Если бы они были техасцами, они бы не стали вдыхать вдвое больше байтов. Но эти калифорнийские слабаков не могли вынести идею удвоить объем памяти, который он взял для струн

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

  • UTF-16 - это компромисс, использующий большую часть 2 байта, но расширяющийся до 2 * 2 байтов на символ для представления определенных символов, которые не включены в базовую многоязычную плоскость (BMP).

Также см. «Абсолютный минимум». Каждый разработчик программного обеспечения должен абсолютно точно знать о Unicode и наборах символов (без оправданий!)

Проблема заключается в том факте, что Unicode является «кодировкой», но не в смысле числа в байтах. UTF-8/16/32 - это все кодировки Unicode, но сам Unicode представляет собой отображение символов на числа. Я думаю, они могли бы использовать более уникальную терминологию, чтобы избежать этой путаницы. jerryjvl 14 лет назад 4
Тем не менее, несмотря на то, что для ОП вопроса есть вероятность, что приложение означает «UTF-16», где написано «Unicode». jerryjvl 14 лет назад 4
Я не уверен, что целью UTF-8 является «сохранение», а не обратная совместимость с ASCII. Mr. Shiny and New 安宇 14 лет назад 3
@Johannes: Консорциум Unicode решил никогда не назначать кодовые точки выше U + 10FFFF, потому что они не могут быть представлены в UTF-16. Это привело к ограничению UTF-8 до 4 байтов. user46971 13 лет назад 0
«Unicode не UTF» - для многих это WTF;) mlvljr 11 лет назад 1
@ Джейсон, Джоэл действительно расист? Pacerier 6 лет назад 0
4
Mark Ransom

Для европейских языков UTF-8 меньше. Для восточных языков разница не столь очевидна.

Оба будут обрабатывать все возможные символы Unicode, поэтому не должно быть никакой разницы в совместимости.

3
Brad Gilbert

Существует больше кодировок Unicode, чем вы думаете.

  • UTF 8

    Кодировка UTF-8 имеет переменную ширину в диапазоне от 1 до 4 байтов, причем верхние биты каждого байта зарезервированы в качестве управляющих битов. Начальные биты первого байта указывают общее количество байтов, использованных для этого символа. Скалярное значение кодовой точки символа представляет собой конкатенацию неуправляемых битов. В этой таблице xпредставляет младшие 8 битов значения Unicode, yпредставляет следующие старшие 8 битов и zпредставляет биты выше этого.

    Unicode Byte1 Byte2 Byte3 Byte4 U+0000-U+007F 0xxxxxxx  U+0080-U+07FF 110yyyxx 10xxxxxx  U+0800-U+FFFF 1110yyyy 10yyyyxx 10xxxxxx  U+10000-U+10FFFF 11110zzz 10zzyyyy 10yyyyxx 10xxxxxx 
  • ПСК-16
  • UCS-16BE
  • UCS-16LE

  • UTF-16
  • UTF-16BE
  • UTF-16LE

  • UTF-32
  • UTF-32-BE
Существует больше кодировок Unicode, чем вы перечислили. Например, [UTF-1] (https://en.wikipedia.org/wiki/UTF-1), [UTF-7] (https://en.wikipedia.org/wiki/UTF-7), [UTF -EBCDIC] (https://en.wikipedia.org/wiki/UTF-EBCDIC), [GB-18030] (https://en.wikipedia.org/wiki/GB_18030), [MIME] (https: // en.wikipedia.org/wiki/MIME), [UTF-9 и UTF-18] (https://en.wikipedia.org/wiki/UTF-9_and_UTF-18) ... Вы также можете использовать любую схему двоичного кодирования кодировать данные Unicode. Читать далее [Сравнение кодировок Юникода] (https://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings) phuclv 8 лет назад 1
1
John Saunders

«Юникод» - это еще один термин для «UTF-16», который представляет собой кодировку набора символов Юникода в шестнадцати битах на символ. UTF-8 кодирует его в восемь битов на символ.

В обоих случаях любое переполнение выделяется другим 16 или восьми битам.

Какой из них лучше? R. Martinho Fernandes 14 лет назад 0
"это зависит от ситуации. John Saunders 14 лет назад 0
Хотя для этого конкретного вопроса кажется, что «Unicode» действительно используется в качестве другого термина для «UTF-16», это не так в общем - см. Ответ Джейсона. Arjan 14 лет назад 0
Вы имеете в виду «на единицу кода», а не «на символ»; и UTF-8, и UTF-16 могут использовать несколько единиц кода для представления символа. И «Unicode» и «UTF-16» - это НЕ одно и то же, за исключением терминологии Microsoft. user46971 13 лет назад 1
1
zildjohn01

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

Имейте в виду, что есть также разница в пропускной способности сети и использовании памяти. Jason Baker 14 лет назад 0
«UTF-8 обычно создает файлы меньшего размера»: обычно нет. UTF-8 производит файлы меньшего размера для файлов ASCII. Если файл состоит только из кодовых точек Unicode выше U + 0800, он будет * больше * в UTF-8, чем в UTF-16. sleske 14 лет назад 1
0
thuzhf

Одним словом, Unicode - это набор символов, в то время как Unicode Big Endian и utf-8 - это две кодировки, которые используются для хранения символов как 01 на компьютере.

И разница в том ...? David Richerby 8 лет назад 0

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