gpt4 book ai didi

c - 如何计算C中unicode字符串中的字符

转载 作者:太空狗 更新时间:2023-10-29 16:17:47 28 4
gpt4 key购买 nike

假设我有一个字符串:

char theString[] = "你们好āa";

鉴于我的编码是utf-8,这个字符串是12个字节长(三个汉字字符每个三个字节,带长音符的拉丁字符是两个字节,'a'是一个字节:

strlen(theString) == 12

如何计算字符数?我怎样才能做下标的等价物,以便:

theString[3] == "好"

我如何对这样的字符串进行 slice 和 cat?

最佳答案

您只计算前两位未设置为 10 的字符(即所有小于 0x80 或大于 0xbf).

那是因为前两位设置为 10 的所有字符都是 UTF-8 连续字节。

参见 here有关编码的说明以及 strlen 如何处理 UTF-8 字符串。

对于 UTF-8 字符串的切片和切 block ,您基本上必须遵循相同的规则。任何以 0 位或 11 序列开始的字节都是 UTF-8 代码点的开始,所有其他都是连续字符。

如果您不想使用第三方库,您最好的选择是简单地提供以下功能:

utf8left (char *destbuff, char *srcbuff, size_t sz);
utf8mid (char *destbuff, char *srcbuff, size_t pos, size_t sz);
utf8rest (char *destbuff, char *srcbuff, size_t pos;

分别得到:

  • 字符串的左边 sz 个 UTF-8 字节。
  • 字符串的 sz 个 UTF-8 字节,从 pos 开始。
  • 字符串的其余 UTF-8 字节,从 pos 开始。

这将是一个不错的构建 block ,能够根据您的目的充分操纵字符串。

关于c - 如何计算C中unicode字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7298059/

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