19

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

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

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

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

6 ответов6

19

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

Юникод не UTF

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

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

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

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

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

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

4

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

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

3

Существует больше кодировок 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
1

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

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

1

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .