[英]C++ Saving file with unicode name problem - How to save UTF-8 filenames correctly in a crossplatform manner?
[英]How to correctly skip unicode (UTF-8) characters?
我编写了一个解析器,结果证明它无法正确处理 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 字符(因为 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 序列的第一个字节
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.