2013-11-20 69 views
-1

有没有办法让Windows 7支持12000(UTF-32)代码页或1200(UTF-16)代码页?如何使Windows 7支持12000(UTF-32)代码页或1200(UTF-16)代码页?

+0

问题是什么?你为什么认为这个问题的原因是操作系统配置? – Ilya

+0

几乎没有题目 –

+0

就MS而言,所有形式的Unicode都是相同的,并且不是ANSI代码页,他们选择使用UTF-16编码作为其API,并且目前还没有计划支持其他任何内容。 – Mgetz

回答

1

不能。这些代码页不能设置为当前的MBCS代码页。 (也就是说,“ANSI”API使用的代码页,例如用终端A命名的Windows函数,如CreateWindowA,或C或C++运行时中的C语言环境使用的代码页)。

  • UTF-32不支持,因为Windows MBCS代码页支持只允许占用一个或两个字节的字符。

  • 由于相同的原因,UTF-16不能被支持 - BMP之外的字符需要4个字节来表示。

  • 另外,不支持UTF-8,因为再次有些字符需要4个字节来表示。

可以通过使用UNICODE API使用UTF-16(小端品种)本身(即是W变体例如CreateWindowW,和宽字符C和C++库函数)。另外,您可以使用MultiByteToWideCharWideCharToMultiByte在UTF-32,UTF-8,UTF-16BE和UTF-16LE之间进行转换。

如果您正在编写一个仅限Windows的程序,则应该只使用UNICODE API。如果你正在编写一个你希望可移植的C运行时程序,你可能希望为Windows创建一个UNICODE版本,并为Unix/Linux创建一个UTF-8版本。

+0

使用'std :: codecvt_utf8_utf16'和'std :: wstring_convert'很容易实现一组简单的'widen'和'narrow'转换函数,我一直使用它们来构成WIN32 I的UTF-8封装我一直在写作过程中。 – Mgetz

+0

@Mgetz你甚至可以使用Win32 API'MultiByteToWideChar'和'WideCharToMultiByte'函数编写简单的包装。 – rubenvb

+0

@Mgetz,的确我已经使用了我自己编写的这种包装器,还有像这里发现的A2W这样的http://msdn.microsoft.com/en-us/library/87zae4a3(v=vs.90).aspx .. 。基于这些,很容易编写一个U82W W2U8宏等等。 – Ben