gpt4 book ai didi

C++ 将 UTF-8 字符串迭代或拆分为符号数组?

转载 作者:可可西里 更新时间:2023-11-01 15:31:47 27 4
gpt4 key购买 nike

正在寻找一种独立于平台和第 3 方库的方法来迭代 UTF-8 字符串或将其拆分为 UTF-8 符号数组。

请发布代码片段。

已解决: C++ iterate or split UTF-8 string into array of symbols?

最佳答案

如果我没理解错的话,听起来您想找到每个 UTF-8 字符的开头。如果是这样,那么解析它们将相当简单(解释它们是另一回事)。但是 RFC 明确定义了涉及多少个八位字节。 :

Char. number range  |        UTF-8 octet sequence
(hexadecimal) | (binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

例如,如果 lb 具有 UTF-8 字符的第一个八位字节,我认为以下内容将确定涉及的八位字节数。

unsigned char lb;

if (( lb & 0x80 ) == 0 ) // lead bit is zero, must be a single ascii
printf( "1 octet\n" );
else if (( lb & 0xE0 ) == 0xC0 ) // 110x xxxx
printf( "2 octets\n" );
else if (( lb & 0xF0 ) == 0xE0 ) // 1110 xxxx
printf( "3 octets\n" );
else if (( lb & 0xF8 ) == 0xF0 ) // 1111 0xxx
printf( "4 octets\n" );
else
printf( "Unrecognized lead byte (%02x)\n", lb );

不过,最终,按照另一篇博文中的建议,使用现有库会更好。上面的代码可能会根据八位字节对字符进行分类,但一旦完成,它就无助于对它们“做”任何事情。

关于C++ 将 UTF-8 字符串迭代或拆分为符号数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2852895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com