【问题标题】:How to make Windows 7 to support 12000(UTF-32) code page or 1200(UTF-16) code page? [closed]如何使 Windows 7 支持 12000(UTF-32) 代码页或 1200(UTF-16) 代码页? [关闭]
【发布时间】:2013-11-20 11:04:45
【问题描述】:

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

【问题讨论】:

  • 有什么问题?为什么你认为这个问题的原因是操作系统配置?
  • 就 MS 而言,所有形式的 Unicode 都是相同的,并且不是 ANSI 代码页,他们选择对其 API 使用 UTF-16 编码,并且没有计划支持其他任何东西时间。

标签: c++ unicode codepages


【解决方案1】:

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

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

  • UTF-16 不支持同样的原因 - BMP 之外的字符需要四个字节来表示。

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

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

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

【讨论】:

  • 一组简单的widennarrow 转换函数使用std::codecvt_utf8_utf16std::wstring_convert 很容易实现,我一直将它们一起用于WIN32 的UTF-8 包装器我一直在写。
  • @Mgetz 你甚至可以使用 Win32 API MultiByteToWideCharWideCharToMultiByte 函数编写简单的包装器。
  • @Mgetz,确实我用过我自己写的这样的包装器,还有像 A2W 在这里找到的那​​些 msdn.microsoft.com/en-us/library/87zae4a3(v=vs.90).aspx ...基于这些,很容易编写 U82W W2U8 宏等。
  • @rubenvb 你可以...但是这些实际上比我这样做的方式重得多,而且该方法需要显式分配临时缓冲区,其中大部分根本不需要.
  • MultiByteToWideChar()WideCharToMultiByte() 分别不支持 UTF-16 输入/输出(LE 的代码页 1200,BE 的 1201)或 UTF-32 转换(LE 的代码页 12000, BE 为 12001)。不过,它们确实支持 UTF-8。
猜你喜欢
  • 2012-07-23
  • 2015-05-17
  • 2014-11-14
  • 1970-01-01
  • 2011-08-18
  • 2021-06-10
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多