使用ExifTool生成的文本文件无法在Gedit与Python中打开,编码错误问题排查求助
ExifTool生成的文本文件无法在Gedit与Python中打开,编码错误问题排查求助
我在Ubuntu 22.04上用gedit打开一个文本文件时遇到了编码错误,这个文件是通过ExifTool(版本12.57)批量提取10万张照片元数据后,用重定向生成的。执行的shell命令如下:
for photo in $(find "/media/data/photos" -type f \( -iname "*.jpg" -o -iname "*.png" \)); do exiftool -a -G0 -s -c '%.7f' "${photo}" >> "/media/data/output/processing.txt" done
之后我尝试用Python 3.10.6读取这个文件,也触发了类似的编码错误。Python代码如下:
with open('/media/data/output/processing.txt','r') as f: data = f.readlines()
对应的报错信息为:
Traceback (most recent call last): File "<stdin>", line 2, in <module> File "/usr/lib/python3.10/codecs.py", line 322, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 3107: invalid continuation byte
后续排查操作
- 我用
file命令检查文件类型,结果显示:
$ file processing.txt processing.txt: ASCII text
- 接着我用
grep查找文件中的管道符|,发现了不少包含乱码的行,部分示例如下:
28978:MakerNotes : BabyAge : |.z.�.�.�.�.�.�.�.g. 153969:MakerNotes : BabyAge : �...�.�.@.3.�.|.�.x. 239759:MakerNotes : BabyAge : .�.�.;.|.A.>.Q.=.�. 287018:MakerNotes : BabyAge : �.�.�.|.�.....K.�.5. 466938:MakerNotes : InternalSerialNumber : |.�.x.�\.v.B... 473829:MakerNotes : BabyAge : |.�.�.�...�.X.'.�.X. 475416:MakerNotes : BabyAge : |.�.�.�...�.X.'.�.X. 475777:MakerNotes : BabyAge : 4.�.|.1...P.:...� 477305:MakerNotes : InternalSerialNumber : �.|.r.|.h.�.�.O. 483418:MakerNotes : BabyAge : 6.�.J.c.`.�.H.�.|.�. 557390:MakerNotes : InternalSerialNumber : �.�.�..|.o&.3. 604471:MakerNotes : BabyAge : �.�.|.Q..A.=.9.�.�. 636619:MakerNotes : BabyAge : �.�.N.�.�.�.G.�.|... 799895:MakerNotes : InternalSerialNumber : .|�..�.�`.�. 944200:MakerNotes : BabyAge : �.�.�.|.�.r.�.�...�
现在想请教各位,我该如何定位问题根源,有没有可行的调试和解决方法?
备注:内容来源于stack exchange,提问作者s.k
相关产品推荐
相关产品推荐

