如何在UTF-8文本中搜索行尾('\n')?

Vio*_*ffe 2 c++ unicode utf-8

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

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

Yu *_*Hao 6

假设任何具有值的字节'\n'实际上是新的行符号,而不是某些不同的多字节符号的尾部,是否安全?

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


Dav*_*aim 6

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

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

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

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