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

Я думаю, что проблема здесь в том, что getPCIHWAddr () использует индекс набора информации об устройстве, который уже уничтожен. Я добавил функцию, которая возвращает указатели на HDEVINFO и SP_DEVINFO_DATA, но не вызывает SetupDiDestroyDeviceInfoList (), это делается методом getPCIHWAddr () после того, как он выполнил свою работу - и вижу: Это работает (Win7 и Win10).

32
задан prinzdezibel 14 April 2009 в 19:17
поделиться

7 ответов

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

Shift-jis, jis, euc-jp, euc-kr, вместе с китайскими кодировками, как правило, включаются.

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

31
ответ дан 27 November 2019 в 20:27
поделиться

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

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

6
ответ дан 27 November 2019 в 20:27
поделиться

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

Что, как обычно, зависит от того, кто говорит,

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

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

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

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

иначе известный (даже более обманчиво) как «ANSI». В этом случае «многобайтовый» набор символов может фактически быть чем-то таким же тривиальным, как западноевропейский cp1252, который использует только один байт на символ!

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

иначе известный (даже более обманчиво) как «ANSI». В этом случае «многобайтовый» набор символов может фактически быть чем-то таким же тривиальным, как западноевропейский cp1252, который использует только один байт на символ!

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

16
ответ дан 27 November 2019 в 20:27
поделиться

Обычно первый, то есть UTF-8-подобный. Для получения дополнительной информации см. Кодирование переменной ширины .

2
ответ дан 27 November 2019 в 20:27
поделиться

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

Ссылки:

4
ответ дан 27 November 2019 в 20:27
поделиться

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

2
ответ дан 27 November 2019 в 20:27
поделиться

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

2
ответ дан 27 November 2019 в 20:27
поделиться
Другие вопросы по тегам:

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