通过非Unicode代码读取UTF-8 Unicode文件

5
我需要读取一个采用UTF-8编码的Unicode文本文件,并将这些数据写入另一个文本文件。该文件中每行都包含有制表符分隔的数据。
我的读取代码是C++代码,不支持Unicode。我正在逐行读取文件,并将该字符串原封不动地放到目标文件中。我无法更改代码,因此不接受代码修改建议。
我想知道的是,在逐行读取时,是否可能在一行内遇到空终止字符('\0'),因为它是Unicode,一个字符可能跨越多个字节。
我认为很可能会在一行内遇到空终止字符。您的想法呢?
2个回答

13

UTF-8使用1个字节表示所有ASCII字符(它们的代码值与标准ASCII编码中相同),并且对于其他字符最多使用4个字节。每个字节的高位被保留为控制位。对于使用多个字节的代码点,设置了控制位。

因此,您的UTF-8文件中不应该出现0字符。

请参阅维基百科关于UTF-8的文章


2
事实上,UTF-8是专门设计的,以便这一点成立,因为在一个编码中存储ASCII范围内的每个字节非常有用,并且当传递给strcpy()及其相关函数时可以以明智的方式工作。 - RBerteig

1

很不可能:UTF-8转义序列中的所有字节都具有设置为1的高位。


Maurice,有没有任何支持这个说法的参考资料? - Aamir
@aamir:请查看Unicode标准,其中详细描述了UTF-8编码中代码点的编码方式。 - Martin York

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接