使用 ICU 和 Nana GUI 库的 C++ - 字符串转换?

C++ using ICU and Nana GUI Library - String conversion?

我刚刚在 C/C++ 中用 ICU 做了一些成功的测试。我需要解析具有不同编码(可能是 UTF-8、UTF-16LE 等)的不同 CSV 文件,对数据进行一些修改,最后将所有内容作为 UTF-8 输出到一个文件中。这就是为什么我选择了 ICU。字符集检测通常工作得很好,字符处理和到 UTF-8 的转换也是如此。

现在我想将执行 CSV 加载、操作等的库部分与 GUI 库 Nana 集成。娜娜好像用的是std::string和std::wstring.

由于 ICU 在内部将所有数据存储为 UTF-16,因此在使用 ICU 时我得到的是 UChars 或 UnicodeStrings。但是我怎么能将它们中的任何一个与 Nana 一起使用,而不 'integrate' 与 ICU 一起使用呢?有什么方法可以将 UChar 数组转换为 wstring,或将 UnicodeString 转换为 wstring?

在 ICU 文档中没有找到任何提示,所以...也许其他人已经在处理这个问题了?

根据 ICU 文档,UChar 数组是 16 位宽字符的数组...这意味着在常见实现中是 wchar_t 数组。这意味着如果 wchar_t 在您的系统中是 16 位宽,您可以安全地将 getTerminatedBuffer() 函数的结果转换为 const wchar_t * 并直接将其用作 C 宽字符字符串,或者用它来构建一个 std::wstring.

大多数 nana 函数期望 std::string 以 UTF-8 编码。

您可以使用 ICU functions 或 return char * 来转换为 UTF-8。

一些 nana 函数,例如 widget::caption 具有 std::wstring 的重载,预计将以 UTF-16(在 windows 中)或 UTF-32(在 [=34 中)编码=]) 可用于传递给 OS 可能是具有本机字符类型和编码的字符串。 如果您需要转换,nana 提供 nana::charset 可以管理(显式或隐式)一些最常需要的转换 from/to UTF-8/UTF-16/UTF-32。

如果您尝试将 static_cast<wchar_t *>(some_UChar*) 传递给娜娜,请告诉我们结果。我无法测试。

急需更新有关 Unicode 处理的 nana 文档(mea culpa)