C++ 如何使Windows 7支持12000(UTF-32)代码页或1200(UTF-16)代码页?

C++ 如何使Windows 7支持12000(UTF-32)代码页或1200(UTF-16)代码页?,c++,unicode,codepages,C++,Unicode,Codepages,是否有办法使windows 7支持12000(UTF-32)代码页或1200(UTF-16)代码页?否。这些代码页不能设置为当前MBCS代码页。(即,ANSI)API所使用的代码页,例如用终端A命名的Windows函数,如 CreateWindowA ,或C语言或C++运行时中C区使用的代码页。 无法支持UTF-32,因为windows MBCS代码页支持仅允许占用一个或两个字节的字符 出于同样的原因,无法支持UTF-16-BMP之外的字符需要四个字节来表示 此外,不支持UTF-8,因为有些字

是否有办法使windows 7支持12000(UTF-32)代码页或1200(UTF-16)代码页?

否。这些代码页不能设置为当前MBCS代码页。(即,ANSI)API所使用的代码页,例如用终端A命名的Windows函数,如<代码> CreateWindowA <代码>,或C语言或C++运行时中C区使用的代码页。
  • 无法支持UTF-32,因为windows MBCS代码页支持仅允许占用一个或两个字节的字符

  • 出于同样的原因,无法支持UTF-16-BMP之外的字符需要四个字节来表示

  • 此外,不支持UTF-8,因为有些字符需要四个字节来表示


使用Unicode API(即W变体,例如代码> CreateWindowW < /Code >,以及宽char C和C++库函数),可以使用UTF16(No.EndoType)。此外,您可以使用

MultiByteToWideChar
WideCharToMultiByte
在UTF-32、UTF-8、UTF-16BE和UTF-16LE之间进行转换


如果您正在编写仅限windows的程序,则应仅使用UNICODE API。如果您正在为C运行时编写一个程序,并且希望使其可移植,那么您可能希望为windows构建一个UNICODE版本,为Unix/Linux构建一个UTF-8版本。

问题是什么?为什么您认为这个问题的原因是操作系统配置?就MS而言,所有形式的Unicode都是相同的,不是ANSI代码页,他们选择在API中使用UTF-16编码,目前不打算支持任何其他功能。使用
std::codevt\u utf8\u utf16
std::wstring\u convert
可以很容易地实现一组简单的
,我正在编写的WIN32 UTF-8包装器中使用了这些功能。@Mgetz您甚至可以使用WIN32 API
MultiByteToWideChar
WideCharToMultiByte
函数编写简单的包装器。@Mgetz,我确实使用过我自己编写的包装器,也使用过这里发现的A2W之类的包装器。。。基于这些,很容易编写U82W W2U8宏等@rubenvb您可以。。。但是这些实际上比我现在的方法要重得多,而且该方法需要显式分配临时缓冲区,其中大多数根本不需要。
MultiByteToWideChar()
WideCharToMultiByte()
分别不支持UTF-16输入/输出(代码页1200表示LE,1201表示be),或UTF-32转换(LE代码页12000,BE代码页12001)。不过,他们确实支持UTF-8。