【发布时间】:2020-06-28 08:33:20
【问题描述】:
如何检查文件中每一行中的每个字符是否包含有效的 utf8?应省略包含无效 utf8 字符的行。
这是我的代码不起作用:
lines = [
"correct UTF-8 text: Here come the tests",
"correct UTF-8 text: You should see the Greek word 'kosme':'κόσμε'",
"not utf-8: U+FDD0 .. U+FDEF = ''",
"not utf-8: 6 bytes (U-7FFFFFFF): '������' ",
"ăѣ????ծềſģȟᎥ????ǩľḿꞑȯ????????????????ȶ????????ψ????????????1234567890!$%^&*()-_=+[{]};:',<.>/?~????Ḇ????????٤ḞԍНǏ????ƘԸⲘ????০Ρ????Ɍ????ȚЦ????Ѡ????ƳȤѧᖯć????ễ????????Ⴙ????????????ļṃʼnо????????ᵲꜱ????ừ????ŵ????????ź1234567890!@#$%^&*()-_=+[{]};:,<.>/?~АḂⲤ????????????ꞠꓧȊ????????ꓡ????????Ǭ????????Ŗ????????????????????ꓫŸ????ả????ƀ????ḋếᵮℊ????Ꭵ????кιṃդⱺ????????????????ŧ????ṽẉ????ყž1234567890!@#$%^&*()-_=+[{]};:',<.>/?~Ѧ????ƇᗞΣℱԍҤ١????К????????ƝȎ????????Ṛ????ṮṺƲᏔꓫ????????????Ꮟçძ????????????ḧ????????ҝɭḿ????????????????ṛ????тú????ẃ⤬????????1234567890!@#$%^&*()-_=+[{]};:',<.>/?~????Β????????????????ĢȞỈ????ꓗʟ????ℕ০????????ՀꓢṰǓⅤ????Ⲭ????????????????§"
]
for line in lines:
try:
print(line)
except UnicodeDecodeError:
print("UnicodeDecodeError: " + line)
pass
并非所有行都不应打印。我的代码有什么问题?
如果我获取一个文件(我将此页面保存为 file.txt:https://www.w3.org/2001/06/utf-8-test/UTF-8-demo.html)并尝试检查 utf-8,我得到一个 UnicodeDecodeError:
文件“test.py”,第 13 行,用于文件中的行:文件“C:\Users\user\AppData\Local\Programs\Python\Python38\lib\encodings\cp1252.py”,第 23 行, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 240: character maps to undefined
代码:
file = open("file.txt", "r")
for line in file:
line = line.strip()
try:
print(line)
except UnicodeDecodeError:
print("UnicodeDecodeError " + line)
pass
except-line & pass 是否应该确保如果发生 UnicodeDecodeError,它将被忽略并且脚本继续下一行?
【问题讨论】:
-
"�" is 是一个有效的 UTF-8 字符,否则您无法在问题中显示它。您的文件包含哪些确切的 字节...?
-
print("not utf-8: 6 bytes (U-7FFFFFFF): '������' ") -
我从这个问题中获取了文件:stackoverflow.com/questions/1301402/example-invalid-utf8-string(Markus Kuhn 的 UTF-8 解码器能力和压力测试文件)。此文件中的所有行也会被打印出来。
-
您是否将该文件的内容复制并粘贴到您自己的文件中?那你还没有用它复制那些问题。您需要按原样使用该文件,或者生成一个包含那些有问题的字节序列的实际文件,其级别比使用常规文本编辑器所能做的低。
-
老兄,您需要将格式错误的 UTF-8 代码单元序列存储为
bytes。那就试试.decode("utf-8")吧。lines列表中的所有字符串实际上都是有效的 UTF-8 字符串。
标签: python python-3.x