即使在 python3 中使用 encoding=utf-8 也无法编码字符 '\u0144'

问题描述

我试图从一些 .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])

我也尝试过 utf16default 编码

解决方法

您没有使用 UTF-8(不在正确的部分)。

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

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

因此,要检查而不是打印,只需写入一个临时文件,然后检查它是否有效(以及是否有 UTF-8 数据)。我认为是这种情况(但请检查!)。

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