Unicode, Unicode Big Endian или UTF-8? В чем разница? Какой формат лучше?
26228
Ashwin Nanjappa
Когда я пытаюсь сохранить текстовый файл с неанглийским текстом в Блокноте, у меня появляется возможность выбора между Unicode, Unicode Big Endian и UTF-8 . В чем разница между этими форматами?
Предполагая, что я не хочу обратной совместимости (со старыми версиями ОС или приложениями), и меня не волнует размер файла, какой из этих форматов лучше?
(Предположим, что текст может быть на таких языках, как китайский или японский, в дополнение к другим языкам.)
Примечание. Из ответов и комментариев ниже видно, что в языке Блокнот Unicode - это UTF-16 (Little Endian), Unicode - это Big UTF-16 (Big Endian), а UTF-8 - это UTF-8.
http://www.utf8everywhere.org/
phuclv 9 лет назад
2
В этой статье есть немного больше, что касается темы:
UTF-8 фокусируется на минимизации размера байта для представления символов из набора ASCII (представление переменной длины: каждый символ представлен от 1 до 4 байтов, а все символы ASCII помещаются на 1 байт). Как говорит Джоэл:
«Посмотрите на все эти нули!» - сказали они, поскольку были американцами и смотрели текст на английском языке, в котором редко использовались кодовые точки выше U + 00FF. Также они были либеральными хиппи в Калифорнии, которые хотели сохранить (насмешливо). Если бы они были техасцами, они бы не стали вдыхать вдвое больше байтов. Но эти калифорнийские слабаков не могли вынести идею удвоить объем памяти, который он взял для струн
UTF-32 фокусируется на исчерпывающем представлении и представлении фиксированной длины, используя 4 байта для всех символов. Это самый простой перевод, отображающий непосредственно кодовую точку Unicode в 4 байта. Очевидно, это не очень эффективно по размеру.
UTF-16 - это компромисс, использующий большую часть 2 байта, но расширяющийся до 2 * 2 байтов на символ для представления определенных символов, которые не включены в базовую многоязычную плоскость (BMP).
Проблема заключается в том факте, что Unicode является «кодировкой», но не в смысле числа в байтах. UTF-8/16/32 - это все кодировки Unicode, но сам Unicode представляет собой отображение символов на числа. Я думаю, они могли бы использовать более уникальную терминологию, чтобы избежать этой путаницы.
jerryjvl 15 лет назад
4
Тем не менее, несмотря на то, что для ОП вопроса есть вероятность, что приложение означает «UTF-16», где написано «Unicode».
jerryjvl 15 лет назад
4
Я не уверен, что целью UTF-8 является «сохранение», а не обратная совместимость с ASCII.
Mr. Shiny and New 安宇 15 лет назад
3
@Johannes: Консорциум Unicode решил никогда не назначать кодовые точки выше U + 10FFFF, потому что они не могут быть представлены в UTF-16. Это привело к ограничению UTF-8 до 4 байтов.
user46971 14 лет назад
0
«Unicode не UTF» - для многих это WTF;)
mlvljr 12 лет назад
1
@ Джейсон, Джоэл действительно расист?
Pacerier 7 лет назад
0
4
Mark Ransom
Для европейских языков UTF-8 меньше. Для восточных языков разница не столь очевидна.
Оба будут обрабатывать все возможные символы Unicode, поэтому не должно быть никакой разницы в совместимости.
3
Brad Gilbert
Существует больше кодировок Unicode, чем вы думаете.
UTF 8
Кодировка UTF-8 имеет переменную ширину в диапазоне от 1 до 4 байтов, причем верхние биты каждого байта зарезервированы в качестве управляющих битов. Начальные биты первого байта указывают общее количество байтов, использованных для этого символа. Скалярное значение кодовой точки символа представляет собой конкатенацию неуправляемых битов. В этой таблице xпредставляет младшие 8 битов значения Unicode, yпредставляет следующие старшие 8 битов и zпредставляет биты выше этого.
Существует больше кодировок 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 9 лет назад
1
1
John Saunders
«Юникод» - это еще один термин для «UTF-16», который представляет собой кодировку набора символов Юникода в шестнадцати битах на символ. UTF-8 кодирует его в восемь битов на символ.
В обоих случаях любое переполнение выделяется другим 16 или восьми битам.
Какой из них лучше?
R. Martinho Fernandes 15 лет назад
0
"это зависит от ситуации.
John Saunders 15 лет назад
0
Хотя для этого конкретного вопроса кажется, что «Unicode» действительно используется в качестве другого термина для «UTF-16», это не так в общем - см. Ответ Джейсона.
Arjan 15 лет назад
0
Вы имеете в виду «на единицу кода», а не «на символ»; и UTF-8, и UTF-16 могут использовать несколько единиц кода для представления символа. И «Unicode» и «UTF-16» - это НЕ одно и то же, за исключением терминологии Microsoft.
user46971 14 лет назад
1
1
zildjohn01
Единственным реальным преимуществом небольших файлов, таких как текстовые файлы, является размер получаемого файла. UTF-8 обычно создает файлы меньшего размера. Но эта разница может быть менее выраженной с китайским / японским текстом.
Имейте в виду, что есть также разница в пропускной способности сети и использовании памяти.
Jason Baker 15 лет назад
0
«UTF-8 обычно создает файлы меньшего размера»: обычно нет. UTF-8 производит файлы меньшего размера для файлов ASCII. Если файл состоит только из кодовых точек Unicode выше U + 0800, он будет * больше * в UTF-8, чем в UTF-16.
sleske 15 лет назад
1
0
thuzhf
Одним словом, Unicode - это набор символов, в то время как Unicode Big Endian и utf-8 - это две кодировки, которые используются для хранения символов как 01 на компьютере.