我有一个C ++库,提供I / O设备接口(包括文件实现)。它还提供UTF-8字符串类。现在,我只需要阅读此IODevice
中的一行。我之所以提到这个库是因为我不能用std::ifstream
打开文件并使用类似std::wbuffer_convert<std::codecvt_utf8<wchar_t>>
的内容来阅读它。我不介意使用stdlib(事实上,我更喜欢它),但我需要阅读IODevice
中的行并将其作为String
返回。
现在,具体问题:如果我逐字节地读取文件,可以安全地假设任何具有值'\n'
的字节实际上是新的行符号,而不是某些不同的多个字符串的尾随部分字符符号?
答案 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编码序列混合使用。