【问题标题】:How to deal with invalid utf8 in fileinput?如何处理文件输入中无效的 utf8?
【发布时间】:2016-02-25 07:29:08
【问题描述】:

我基本上有以下代码:

def main():
    for filename in fileinput.input():
        filename = filename.strip()
        process_file(filename)

脚本以换行符分隔的文件名列表作为其输入。但是,某些文件名包含无效的 utf8,这会导致 fileinput.input() 内爆。我已经阅读了surrogateescape 错误处理程序,我认为这是我想要的,但我不知道如何为文件输入设置错误处理程序。

简而言之:如何让fileinput 处理无效的Unicode?​​p>

【问题讨论】:

    标签: python python-3.x unicode utf-8


    【解决方案1】:

    POSIX 上的文件名可以是任意字节序列(b'\0'b'/' 除外),即在一般情况下没有字符编码可以解码它们(这就是为什么存在使用 surrogateescape 错误处理程序的 os.fsdecode() 的原因) .

    您可以使用二进制模式读取文件名,然后如果输入不应包含它们,则跳过 undecodable filenames 或将它们按原样(或 os.fsdecode())传递给需要文件名的函数:

    for filename in fileinput.input(mode='rb'):
        process_file(os.fsdecode(filename).strip())
    

    注意,有几个已知的 Python 错误与使用二进制模式和 fileinput 有关,例如:

    【讨论】:

      【解决方案2】:

      以下文档请使用打开钩子:

      def main():
      for filename in fileinput.input(openhook=fileinput.hook_encoded("utf-8")):
          filename = filename.strip()
          process_file(filename)
      

      【讨论】:

        猜你喜欢
        • 2019-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多