我有一个函数,它输入wchar_t*
。现在在这个函数中我必须处理代码点。
由于该程序应该在多个平台上运行,因此我对wchar_t*
中的编码知之甚少。
我尝试通过wchar_t*
从char32_t*
转换为std::codecvt<char32_t, wchar_t, std::mbstate_t>
。可悲的是,这种专业化似乎并不存在。
然后我想我或许可以简单地使用wchar_t*
作为icu::UnicodeString
的只读输入缓冲区,但似乎我首先必须通过{{转换为UChar*
1}}。但是我再次首先需要在u_strFromWCS
中分配一个UChar
缓冲区,并使用正确数量的代码单元。
有人能告诉我在UChar
中访问代码点的最有效方法是什么?
如果我没有弄错,以下示例应该为每个代码点使用两个代码单元。
wchar_t*
答案 0 :(得分:1)
该标准对编码或关于wchar_t
的任何内容都知之甚少,因此如果不做出一些假设,就无法找到解决方案。
一个合理的假设是,如果sizeof(wchar_t) == 2
(在Windows上),它是UTF-16,而如果sizeof(wchar_t) == 4
,它是UTF-32(在Unix上),所以你可以使用宏或模板在编译时选择哪个选择。如果wchar_t
中的某些内容可能会在某些遗留编码中进行编码,因为没有自动检测编码的一般方法,您必须在其他位置获取编码信息。
答案 1 :(得分:-1)
简化,wchar_t包含Unicode字符。在我的代码中,我经常通过索引访问每个char代码(如果我没有误解你的问题)。
wchar_t* unicodeString = L"this is a unicode string";
unicodeString [0]是单个字符