访问wchar_t *的代码点

时间:2014-04-27 09:24:00

标签: c++ c++11 unicode icu codecvt

我有一个函数,它输入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*

2 个答案:

答案 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]是单个字符