如何在UTF-8文本中搜索行结束符(' ') ?
How do I search for end of line (' ') in a UTF-8 text?
我有一个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编码序列混合。
相关文章:
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么在这个代码结束循环中没有得到结束
- 试图对缓存进行跨步测试,但程序并没有结束
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 转换特殊字符(UTF-8)
- 为什么擦除方法会影响结束方法
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 删除映射和分割错误中的一个过去结束元素
- 如何在CPP的给定目录中列出UTF编码的文件名?
- 如何使用 C++将 ISO-2022-KR 编码转换为 UTF-8 编码?
- 在C++中使用 UTF-8 字符串和字符
- 如何使用 SFML 在贪吃蛇游戏中定义游戏结束?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- 在函数结束后使用指向变量的指针是否安全?
- C ++尝试并捕获未结束的程序
- 为什么我的程序在输入某个形状的面积的测量值后没有结束?
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 取消引用结束指针到数组类型的一个
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?