访问wchar_t*的代码点
Accessing code points of wchar_t*
我有一个函数,它得到一个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]是一个单字符
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么需要与 WCHAR 相关的代码处理
- 如何获取特定 WCHAR 字符的代码点
- 需要连接std:string + WCHAR移动gcc代码到Visual c++ 2010