代码之家  ›  专栏  ›  技术社区  ›  user2667066

在python中逐行读取二进制文件是否会导致unicode数据出现问题?

  •  1
  • user2667066  · 技术社区  · 6 年前

    with bz2.open(filename, 'rb') as file:
        for line in file:
            if line.startswith(b'Hello'):
                #decode line here, then do stuff
    

    但我突然想到,如果其中一个unicode字符包含与换行符相同的字节,该怎么办?通过做 for line in file

    1 回复  |  直到 6 年前
        1
  •  1
  •   lenz    6 年前

    逐行迭代将适用于UTF-8编码数据。 不是靠魔法,而是靠设计: 创建UTF-8是为了向后兼容ASCII。

    ASCII仅使用字节值0到127,为任何类型的扩展保留可能值的上半部分。

    例如,字母“”(大写字母C和上面的点)具有Unicode代码点值 U+010A . 在UTF-8中,这是用字节序列编码的 C4 8A ,因此不使用字节 0A

    相反,UTF-16编码的字符与 0A 01 01 0A 所以,我想UTF-16不安全,不能进行逐行迭代。 但它不像文件编码那样常见。