gpt4 book ai didi

c++ - 如何正确跳过 unicode (UTF-8) 字符?

转载 作者:行者123 更新时间:2023-11-28 04:09:50 24 4
gpt4 key购买 nike

我编写了一个解析器,结果无法正确处理 UTF-8 文本。

解析器非常非常简单:

while(pos < end) { 

// find some ASCII char
if (text.at(pos) == '@') {
// Check some conditions and if the syntax is wrong...
if (...)
createDiagnostic(pos);
}

pos++;
}

因此您可以看到我正在 pos 创建诊断。但是如果有一些 UTF-8 字符,那么 pos 是错误的(因为 UTF-8 字符实际上由多个 char 组成。如何正确地跳过 UTF-8 字符,就好像它们是一个字符一样性格?

我需要这个,因为诊断被发送到支持 UTF-8 的 VSCode。

我尝试阅读一些关于 C++ 中的 UTF-8 的文章,但我发现的每一篇文章都非常庞大。我只需要跳过 UTF-8。

最佳答案

如果代码点小于 128,则 UTF-8 将其编码为 ASCII(未设置最高位)。如果代码点等于或大于 128,则所有编码字节都将设置最高位。所以,这将起作用:

unsigned char b = <...>; // b is a byte from a utf-8 string
if (b&0x80) {
// ignore it, as b is part of a >=128 codepoint
} else {
// use b as an ASCII code
}

注意:如果要计算字符串中 UTF-8 代码点的数量,则必须使用以下方法计算字节数:

  • !(b&0x80):这意味着该字节是一个ASCII字符,或者
  • (b&0xc0)==0xc0:这意味着该字节是多字节 UTF8 序列的第一个字节

关于c++ - 如何正确跳过 unicode (UTF-8) 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58046533/

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