使用 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)
我刚刚在 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)