1

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

现在我想将执行 CSV 加载、操作等的库部分与 GUI 库 Nana 集成。Nana 似乎使用 std::string 和 std::wstring。

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

在 ICU 文档中没有找到任何提示,所以......也许其他人已经在做这件事了?

4

2 回答 2

1

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

您可以使用采取或返回的ICU 函数char *来转换为 UTF-8。

一些 nana 函数,例如具有预期以 UTF-16(在 Windows 中)或 UTF-32(在 Linux 中)编码的widget::caption重载,可用于向操作系统传递可能是具有本机字符类型的字符串和std::wstring编码。如果您需要 nana 提供的转换nana::charset,它可以管理(显式或隐式)一些最常用的从/到 UTF-8/UTF-16/UTF-32 的转换。

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

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

于 2016-07-13T22:02:30.387 回答
0

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

于 2016-07-12T15:53:36.813 回答