【发布时间】:2017-08-31 13:48:35
【问题描述】:
我有 punycodes 字符串(转义和非转义)的第 3 方代码。作为 Unicode 输入/输出,它使用 32 位 Unicode 字符串(基于 uint32_t),而不是 16 位。我自己的输入/输出是 BSTR(UTF 16 位)。我应该如何在 32 位 Unicode 字符数组和 BSTR(双向)之间进行转换?
代码应在 Visual C++ 6.0 及更高版本中运行。
【问题讨论】:
-
你需要一个第三方库,
<codecvt>header 直到 VS2010 才可用 -
您不能为该语言的过时 版本寻求解决方案。 VC 6 已经 20 岁了。那时 C++ 甚至不支持 Unicode。当前的 language 版本是 C++ 17。该语言在 C++ 11 中通过
char16_t、char32_t获得了 Unicode 支持和文字。 C++ 14 在 STL 中添加了对 u16string、u32string 的支持。没有任何符合标准的 解决方案可以与 20 年前的编译器一起使用。检查String and Character literals以供参考 -
@Mgetz 这不仅仅是何时添加
codecvt的问题。毕竟BSTR是一个有长度的UTF16字符串。 20 年前,该语言本身没有 Unicode 支持。现在有了。uint32_t是现在要使用的 错误 类型。而且我真的不认为 20 年前 VC++ 6 能够可靠地与 UTF32 一起工作。字符集转换委托给操作系统。我认为 VC++ 6 当时没有对 UTF32 进行适当的调用,只是因为它们不存在 -
@Mgetz,不,它在 C++11 中获得了 Unicode 字符串、文字等。它确实现在有
char16_t、char32_t、u16string和u32string。检查String and Character Literals。它仍然没有的是 UTF8 支持。char、string和good will用于UTF8,希望other开发者不要使用错误的codepage来读取本地化文件