Что такое многобайтовый набор символов?

Использует ли термин multibyte кодировку, чьи символы могут (но не должны быть) более одного байта (например, UTF-8) или ссылаться на наборы символов, которые в любом случае шире 1 байт (например, UTF-16)? Другими словами: что имеется в виду, если кто-нибудь говорит о многобайтовых наборах символов?

Ответ 1

Этот термин неоднозначен, но в моей работе по интернационализации мы обычно избегали термина "многобайтовые наборы символов", чтобы ссылаться на кодировки на основе Unicode. Как правило, мы использовали термин только для устаревших схем кодирования, которые имели один или несколько байтов для определения каждого символа (исключая кодировки, для которых требуется только один байт на символ).

Shift-jis, jis, euc-jp, euc-kr, наряду с китайскими кодировками, обычно включаются.

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

Несколько устаревших кодировок для таких языков, как тайский и вьетнамский, имеют некоторую сложность многобайтовых наборов символов, но на самом деле просто построены на объединении символов и обычно не объединены с широким термином "multibyte".

Ответ 2

Что означает, если кто-нибудь говорит о многобайтовых наборах символов?

Это, как обычно, зависит от того, кто делает разговор!

Логически, он должен включать UTF-8, Shift-JIS, GB и т.д.: кодировки переменной длины. UTF-16 часто не рассматривался в этой группе (хотя это и есть то, что с суррогатами и, конечно же, несколько байтов при кодировании в байты через UTF-16LE/UTF-16BE).

Но в Microsoftland термин обычно используется для обозначения кодовой страницы по умолчанию для стандартной длины (для устаревших приложений, отличных от Юникода, которых, к сожалению, еще много). В этом использовании UTF-8 и UTF-16LE/UTF-16BE не могут быть включены, потому что системная кодовая страница в Windows не может быть установлена ​​ни в одном из этих кодировок.

Действительно, в некоторых случаях "mbcs" является не более чем синонимом системной кодовой страницы, иначе известной (еще более ошибочной) как "ANSI". В этом случае набор символов "многобайтовый" действительно может быть чем-то таким же тривиальным, как cp1252 Western European, который использует только один байт на символ!

Мой совет: используйте "переменную длину", когда вы это имеете в виду, и избегайте двусмысленного термина "multibyte"; когда кто-то другой его использует, вам нужно попросить разъяснений, но обычно кто-то с фоном Windows будет говорить о устаревшей кодировке Восточной Азии, такой как cp932 (Shift-JIS), а не UTF.

Ответ 3

Все наборы символов, в которых у вас нет 1-байтового = 1 символьного отображения. Все варианты Unicode, но также и азиатские наборы символов являются многобайтными.

Для получения дополнительной информации я предлагаю прочитать эту статью в Википедии.

Ответ 4

Многобайтовый символ будет означать символ, для кодирования которого требуется более 1 байт. Это не означает, однако, что все символы, использующие эту конкретную кодировку, будут иметь одинаковую ширину (в байтах). Например: кодированный символ UTF-8 и UTF-16 может иногда использовать несколько байтов, тогда как все кодированные символы UTF-32 всегда используют 32-битные.

Литература:

Ответ 6

Первый - хотя термин "кодирование с переменной длиной" будет более уместным.

Ответ 7

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

Ответ 8

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

Ссылка: Однобайтовые и многобайтовые наборы символов