can';t编码字符'\u0144';即使在python3中使用encoding=utf-8

can';t编码字符'\u0144';即使在python3中使用encoding=utf-8,python,python-3.x,unicode,python-unicode,txt,Python,Python 3.x,Unicode,Python Unicode,Txt,我试图从一些.txt文件中读取一些信息,它们都是英文的,没有任何其他unicode字符,问题是对于一个特定的文件,它只是崩溃了,没有显示信息,错误是 Traceback (most recent call last): File "C:\users\bienvenido\desktop\programmacion\harvard\cs50 artificial inteligence\6\questions\questions.py", line 107, in <

我试图从一些
.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>
我还尝试了
utf16
default
编码

您没有使用UTF-8(不在右侧部分)

问题在于编码部分,写入部分(字符串到二进制数据/编码字符串)也是如此。在另一种情况下,您将出现“无法解码”错误

所以不是“开放”,而是印刷品。并非所有控制台都允许UTF-8,Python(默认情况下)将控制台编码用于标准输出(这是非常明智的)

所以,要检查,而不是打印,只需写入一个临时文件,检查它是否工作(以及是否有UTF-8数据)


在这种情况下,您应该检查为什么您的控制台不是UTF-8。众所周知,Microsoft Windows是最后一个非默认UTF-8的大型操作系统。您可以在此网站上查看如何在各种终端/控制台/电源壳/工具上启用UTF-8。但是,当运行用户ha时,其他操作系统中也可能出现类似错误s是一个非UTF-8区域设置(例如,使用
LANG
环境设置)。最常见的情况是
C
(标准区域设置,比UTF-8旧,它只使用ASCII,因为它必须非常标准,它只支持ASCII)。此区域设置主要由root用户使用,但现代操作系统可能使用
C
的UTF-8版本).

首先,您可以
打印(文件)
以查看哪个文件存在问题,然后在普通编辑器中打开它以查看文件中的内容。当我运行
print('\u0144')
时,我得到的
不是英文字符-它是波兰语字符。顺便说一句:您应该检查您是否对
read()
print()
有问题-有时在Windows中
print()
尝试使用
latin1
cp1250
对文本进行编码,但它在显示
utf-8
时遇到问题,始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图,也不是指向外部门户的链接)进行讨论(不是注释)。还有其他有用的信息。请创建一个。提供最小的文件内容(及其编码)和最小的代码以产生您看到的真实错误。你所展示的是不可复制的。显然,
“\u0144.encode('utf8')
起作用,因此问题标题也不能代表问题。由于这是一个编码(而非解码)错误,可能的原因是将
打印到未为其配置的终端,但未提供完整的回溯。最好打印(有问题的)整个错误堆栈,或至少从代码开始)。堆栈中的最后一项(在本例中)在库中,因此它不会告诉我们代码中发生错误的位置。
with open(os.path.join(directory,file), encoding='utf-8') as f:
    files[file] = f.read()
    print(files[file])