Почему UTF-8 не позволен как кодовая страница “ANSI”?

Функция Windows _setmbcp позволяет любую действительную кодовую страницу...

(кроме UTF-7 и UTF-8, которые не поддерживаются),

Хорошо, не поддержка UTF-7 имеет смысл: Символы имеют групповые представления, и это представляет сложность и угрозы безопасности.

Но почему не UTF-8?

Насколько я понимаю версии "ANSI" Windows API functions преобразовывают свои аргументы UTF-16, вызывают эквивалентную функцию "W" и преобразовывают любые строки в выводе к "ANSI". Это - то, что я делал вручную. Итак, почему Windows не может сделать этого для меня?

18
задан dan04 8 June 2010 в 06:04
поделиться

2 ответа

Кодовая страница "ANSI" по сути является наследием: эпоха Windows 9X. Все современное программное обеспечение должно быть основано на Unicode (то есть UTF-16).

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

9
ответ дан 30 November 2019 в 09:06
поделиться

_setmbcp () - это функция VC ++ RTL, а не функция Win32 API. Это влияет только на то, как RTL интерпретирует строки. Это никак не влияет на функции Win32 API A . Когда они вызывают свои аналоги W внутри, функции A всегда используют MultiByteToWideChar () и WideCharToMultiByte () с указанием кодовой страницы 0 ( ] CP_ACP ), чтобы использовать системную кодовую страницу Ansi по умолчанию для преобразований.

5
ответ дан 30 November 2019 в 09:06
поделиться
Другие вопросы по тегам:

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