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

时间:2015-07-30 10:34:37

标签: c++ unicode utf-8

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

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

2 个答案:

答案 0 :(得分:6)

  

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

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

答案 1 :(得分:4)

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

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

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

这种编码模式确保ASCII字符可以与非ASCII编码序列混合使用。