访问wchar_t*的代码点

Accessing code points of wchar_t*

本文关键字:代码 wchar 访问      更新时间:2023-10-16

我有一个函数,它得到一个wchar_t*作为输入。现在,在这个函数中,我必须处理代码点。

由于这个程序应该在多个平台上运行,所以我对wchar_t*中的编码知之甚少。

我试图通过std::codecvt<char32_t, wchar_t, std::mbstate_t>实现从wchar_t*char32_t*的转换。遗憾的是,这种专业化似乎并不存在。

然后我想我也许可以简单地使用wchar_t*作为icu::UnicodeString的只读输入缓冲区,但似乎我首先必须通过u_strFromWCS转换为UChar*。但话说回来,我首先需要分配一个UChar缓冲区,在UChar中有正确数量的代码单元。

有人能告诉我在wchar_t*中访问代码点最有效的方法是什么吗?

示例:

如果我没有错的话,下面的例子应该使用每个代码点两个代码单元。

const wchar_t *test = L"A    剝Ц B";

该标准对编码或wchar_t的任何内容都很少提及,因此如果不进行一些假设,就无法获得解决方案。

一个合理的假设是,如果sizeof(wchar_t) == 2(在Windows上)是UTF-16,而如果sizeof(wchar_t) == 4,则是UTF-32(在Unix上),因此您可以在编译时使用宏或模板来选择要选择的。如果wchar_t中的某些内容可能以某种传统编码进行编码,因为没有自动检测编码的通用方法,那么您必须从其他地方获取编码信息。

简化,wchar_t包含一个Unicode字符。在我的代码中,我经常通过索引访问每个字符代码(如果我没有误解你的问题的话)。

wchar_t* unicodeString = L"this is a unicode string";

unicodeString[0]是一个单字符