0

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

由于这个程序应该在多个平台上运行,我对wchar_t*.

我试图从wchar_t*char32_t*via进行转换std::codecvt<char32_t, wchar_t, std::mbstate_t>。可悲的是,这种专业化似乎并不存在。

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

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

例子:

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

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

2 回答 2

1

该标准对编码或任何其他内容几乎没有说明,wchar_t因此如果不做一些假设,您就无法获得解决方案。

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

于 2014-04-27T13:46:28.277 回答
-1

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

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

unicodeString[0] 是单个字符

于 2014-04-27T10:28:30.857 回答