Есть ли способ заставить Windows 7 поддерживать кодовую страницу 12000 (UTF-32) или кодовую страницу 1200 (UTF-16)?
Нет. Эти кодовые страницы не могут быть установлены в качестве текущей кодовой страницы MBCS. (То есть кодовая страница, используемая API «ANSI», такая как функции Windows, названные терминалом A, такие как CreateWindowA
или кодовая страница, используемая языковым стандартом C в среде выполнения C или C ++).
UTF-32 не поддерживается, поскольку поддержка кодовой страницы Windows MBCS допускает только символы, которые занимают один или два байта.
UTF-16 не может поддерживаться по той же причине — символам за пределами BMP требуется четыре байта для представления.
Кроме того, UTF-8 не поддерживается, потому что для некоторых символов снова требуется четыре байта.
Вы можете использовать UTF-16 (разновидность Little-endian) изначально, используя UNICODE API (то есть варианты W, например. CreateWindowW
и функции библиотеки широких символов C и C ++). Кроме того, вы можете использовать MultiByteToWideChar
а также WideCharToMultiByte
конвертировать между UTF-32, UTF-8, UTF-16BE и UTF-16LE.
Если вы пишете программу только для Windows, вы должны использовать только UNICODE API. Если вы пишете программу для среды выполнения C, которую хотите сделать переносимой, вы можете создать версию UNICODE для Windows и версию UTF-8 для Unix / Linux.
Других решений пока нет …