Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何处理fileinput中无效的utf8?_Python_Python 3.x_Unicode_Utf 8 - Fatal编程技术网

Python 如何处理fileinput中无效的utf8?

Python 如何处理fileinput中无效的utf8?,python,python-3.x,unicode,utf-8,Python,Python 3.x,Unicode,Utf 8,我基本上有以下代码: def main(): for filename in fileinput.input(): filename = filename.strip() process_file(filename) 该脚本采用一个以换行符分隔的文件名列表作为输入。但是,某些文件名包含无效的utf8,这会导致fileinput.input()内爆。我读过关于subscrateescape错误处理程序的内容,我想这就是我想要的,但是我不知道如何为filei

我基本上有以下代码:

def main():
    for filename in fileinput.input():
        filename = filename.strip()
        process_file(filename)
该脚本采用一个以换行符分隔的文件名列表作为输入。但是,某些文件名包含无效的utf8,这会导致
fileinput.input()
内爆。我读过关于
subscrateescape
错误处理程序的内容,我想这就是我想要的,但是我不知道如何为fileinput设置错误处理程序


简言之:如何获取
fileinput
以处理无效的Unicode?

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

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

POSIX上的文件名可以是任意字节序列(除了
b'\0'
b'/'
),也就是说,在一般情况下,没有字符编码可以对它们进行解码(这就是为什么存在使用
subrogateScape
错误处理程序的文件名)

您可以使用二进制模式读取文件名,然后在输入不应包含文件名时跳过,或者按原样(或)传递给需要文件名的函数:

for filename in fileinput.input(mode='rb'):
    process_file(os.fsdecode(filename).strip())
注意,有几个已知的Python错误与使用二进制模式和
fileinput
有关,例如: