如何在UTF-8文本中搜索行尾(';\n';)? 我有一个C++库,提供I/O设备接口(包括文件的实现)。它还提供了一个UTF-8字符串类。现在,我只需要从这个IODevice中读一行。我提到这个库的原因是,例如,我不能用std::ifstream打开文件,并使用类似std::wbuffer\u convert的方法读取它。我不介意使用stdlib(事实上,我更喜欢它),但我确实需要从我的IODevice读取该行,并将其作为我的字符串返回

如何在UTF-8文本中搜索行尾(';\n';)? 我有一个C++库,提供I/O设备接口(包括文件的实现)。它还提供了一个UTF-8字符串类。现在,我只需要从这个IODevice中读一行。我提到这个库的原因是,例如,我不能用std::ifstream打开文件,并使用类似std::wbuffer\u convert的方法读取它。我不介意使用stdlib(事实上,我更喜欢它),但我确实需要从我的IODevice读取该行,并将其作为我的字符串返回,c++,unicode,utf-8,C++,Unicode,Utf 8,现在,具体的问题是:如果我逐字节读取文件,是否可以安全地假设任何具有值'\n'的字节实际上是一个新行符号,而不是某个不同多字节符号的尾部 可以安全地假定任何值为“\n”的字节实际上是一个新行符号,而不是某个不同多字节符号的尾随部分吗 是的,在UTF-8中,所有ASCII字节都不会出现在非ASCII码点中。再加上@Yu Hao所说的,UTF8实际上与ASCII向后兼容,它不能以任何形式将其中断 原因如下:UTF8规定任何ASCII字符都将保留其ASCII的位表示形式,这将导致其前导位始终为0 任何

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

可以安全地假定任何值为“\n”的字节实际上是一个新行符号,而不是某个不同多字节符号的尾随部分吗


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

再加上@Yu Hao所说的,UTF8实际上与ASCII向后兼容,它不能以任何形式将其中断

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

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

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