【发布时间】:2021-08-28 01:24:50
【问题描述】:
我正在尝试从一些.txt 文件中读取一些信息,它们都是英文的,并且没有任何其他 unicode 字符,问题是对于特定文件它刚刚崩溃并且不显示信息,错误是
Traceback (most recent call last):
File "C:\users\bienvenido\desktop\programmacion\harvard\cs50 artificial inteligence\6\questions\questions.py", line 107, in <module>
main()
File "C:\users\bienvenido\desktop\programmacion\harvard\cs50 artificial inteligence\6\questions\questions.py", line 16, in main
files = load_files(sys.argv[1])
File "C:\users\bienvenido\desktop\programmacion\harvard\cs50 artificial inteligence\6\questions\questions.py", line 59, in load_files
files[file] = f.read()
File "C:\Users\BIENVENIDO\AppData\Local\Programs\Python\Python39\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 38619: character maps to <undefined>
而我正在做的是
with open(os.path.join(directory,file), encoding='utf-8') as f:
files[file] = f.read()
print(files[file])
我也试过utf16和default编码
【问题讨论】:
-
首先你可以
print(file)查看哪个文件有问题并在普通编辑器中打开它以查看你在文件中的内容。当我运行print('\u0144')然后我得到ń这不是英文字符 - 它是波兰字符。 -
顺便说一句:您应该检查
read()或print()是否有问题-有时在Windows 中print()尝试使用latin1或cp1250对文本进行编码,但它有问题显示utf-8 -
总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。
-
创建一个minimal reproducible example。提供最少的文件内容(及其编码)和最少的代码来产生您看到的真正错误。您所展示的内容不可重现。显然
'\u0144'.encode('utf8')有效,所以问题标题也不能代表问题。由于它是编码(而非解码)错误,因此可能的原因是print指向未配置的终端,但未提供完整的回溯。 -
最好打印(有问题的)整个错误堆栈,或者至少从您的代码开始)。堆栈中的最后一项(在本例中)位于库中,因此它并不能告诉我们代码中错误发生的位置。
标签: python python-3.x unicode python-unicode txt