将 ICU Unicode 字符串转换为 std::wstring(或 wchar_t*)
Convert ICU Unicode string to std::wstring (or wchar_t*)
是否有从 icu UnicodeString
创建 std::wstring
的 icu 函数?我一直在搜索 ICU 手册,但一直找不到。
(我知道我可以将 UnicodeString
转换为 UTF8
,然后转换为依赖于平台的 wchar_t*
但我正在寻找 UnicodeString
中的一个函数可以做到这一点转换。
C++ 标准没有规定 std::wstring
的任何特定编码。在 Windows 系统上,wchar_t
是 16 位,而在 Linux、macOS 和其他几个平台上,wchar_t
是 32 位。就 C++ 的 std::wstring
而言,它只是 wchar_t
的任意序列,与 std::string
只是 char
.[=26 的任意序列非常相似=]
似乎 icu::UnicodeString
没有创建 std::wstring
的内置方法,但如果你真的想创建 std::wstring
,你可以使用基于 C 的API u_strToWCS()
像这样:
icu::UnicodeString ustr = /* get from somewhere */;
std::wstring wstr;
int32_t requiredSize;
UErrorCode error = U_ZERO_ERROR;
// obtain the size of string we need
u_strToWCS(nullptr, 0, &requiredSize, ustr.getBuffer(), ustr.length(), &error);
// resize accordingly (this will not include any terminating null character, but it also doesn't need to either)
wstr.resize(requiredSize);
// copy the UnicodeString buffer to the std::wstring.
u_strToWCS(wstr.data(), wstr.size(), nullptr, ustr.getBuffer(), ustr.length(), &error);
据推测,u_strToWCS()
将使用最有效的方法从 UChar
转换为 wchar_t
(如果它们大小相同,那么我想这只是一个简单的副本) .
是否有从 icu UnicodeString
创建 std::wstring
的 icu 函数?我一直在搜索 ICU 手册,但一直找不到。
(我知道我可以将 UnicodeString
转换为 UTF8
,然后转换为依赖于平台的 wchar_t*
但我正在寻找 UnicodeString
中的一个函数可以做到这一点转换。
C++ 标准没有规定 std::wstring
的任何特定编码。在 Windows 系统上,wchar_t
是 16 位,而在 Linux、macOS 和其他几个平台上,wchar_t
是 32 位。就 C++ 的 std::wstring
而言,它只是 wchar_t
的任意序列,与 std::string
只是 char
.[=26 的任意序列非常相似=]
似乎 icu::UnicodeString
没有创建 std::wstring
的内置方法,但如果你真的想创建 std::wstring
,你可以使用基于 C 的API u_strToWCS()
像这样:
icu::UnicodeString ustr = /* get from somewhere */;
std::wstring wstr;
int32_t requiredSize;
UErrorCode error = U_ZERO_ERROR;
// obtain the size of string we need
u_strToWCS(nullptr, 0, &requiredSize, ustr.getBuffer(), ustr.length(), &error);
// resize accordingly (this will not include any terminating null character, but it also doesn't need to either)
wstr.resize(requiredSize);
// copy the UnicodeString buffer to the std::wstring.
u_strToWCS(wstr.data(), wstr.size(), nullptr, ustr.getBuffer(), ustr.length(), &error);
据推测,u_strToWCS()
将使用最有效的方法从 UChar
转换为 wchar_t
(如果它们大小相同,那么我想这只是一个简单的副本) .