【问题标题】:Reading a UTF-8 Unicode file through non-unicode code通过非 unicode 代码读取 UTF-8 Unicode 文件
【发布时间】:2009-07-30 05:57:57
【问题描述】:

我必须读取一个带有 UTF-8 编码的 Unicode 文本文件,并且必须将此数据写入另一个文本文件。该文件在行中有制表符分隔的数据。

我的阅读代码是不支持 unicode 的 C++ 代码。我正在做的是在string/char* 中逐行读取文件并将该字符串按原样放入目标文件。我无法更改代码,因此不欢迎提出代码更改建议。

我想知道的是,在逐行读取时,我是否会在一行中遇到 NULL 终止字符('\0'),因为它是 unicode 并且一个字符可以跨越多个字节。

我的想法是,很有可能在一行中遇到 NULL 终止字符。你的想法?

【问题讨论】:

    标签: c++ unicode utf-8 text-files


    【解决方案1】:

    UTF-8 对所有 ASCII 字符使用 1 个字节,这些字符与标准 ASCII 编码具有相同的代码值,而对于其他字符最多使用 4 个字节。每个字节的高位保留为控制位。对于使用超过 1 个字节的代码点,设置控制位。

    因此,您的 UTF-8 文件中不应有 0 个字符。

    查看Wikipedia for UTF-8

    【讨论】:

    • 事实上,UTF-8 是专门设计的,因此这是正确的,因为它很有用,其中 ASCII 范围存储在每个字节中,并且以合理的方式工作当传递给strcpy() 及其朋友时。
    【解决方案2】:

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

    【讨论】:

    • 莫里斯,是否有任何参考资料支持这一说法?
    • @aamir:检查 Unicode 标准。它非常详细地描述了代码点如何以 UTF-8 编码。
    猜你喜欢
    • 2014-09-02
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多