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
有关,例如: