如何在UTF-8文本中搜索行结束符(' ') ?

How do I search for end of line (' ') in a UTF-8 text?

本文关键字:结束 UTF-8 文本 搜索      更新时间:2023-10-16

我有一个c++库,它提供了I/O设备接口(包括文件的实现)。它还提供了一个UTF-8字符串类。现在,我只需要从这个IODevice中读取一行。我提到这个库的原因是我不能,例如,用std::ifstream打开文件并使用std::wbuffer_convert<std::codecvt_utf8<wchar_t>>之类的东西读取它。我不介意使用stdlib(事实上,我更喜欢它),但我确实需要从我的IODevice中读取行并将其返回为我的String

现在,具体的问题:如果我一个字节一个字节地读取文件,是否可以安全地假设任何值为'n'的字节实际上是一个新的行符号,而不是一些不同的多字节符号的末尾部分?

是否可以安全地假设任何值为'n'的字节实际上是一个新的行符号,而不是一些不同的多字节符号的末尾部分?

是的,在UTF-8中,所有ASCII字节都不会出现在非ASCII码点中。

补充一下@Yu Hao所说的,UTF8实际上是向后兼容ASCII的,它不能以任何方式破坏它。


原因如下:UTF8规定任何ASCII字符将保留其ASCII的位表示,这导致它们的前导位始终是0

任何非ascii字符将被编码为2-4个字节,其前导位始终以1开头(第一个字节将连续的1序列作为表示字符所需的字节数,其次是0,其余字节将以10开头)。

此编码模式确保ASCII字符不能与非ASCII编码序列混合。