当我尝试这样做时
os.listdir("F:\\music")
我明白了
UnicodeEncodeError: 'gbk' codec can't encode character '\xe3' in position 643: illegal multibyte sequence
os.listdir
适用于其他目录,因此问题的原因显然是F:\music
本身内的一些奇怪编码的文件或文件夹。如何找到此错误的来源?
答案 0 :(得分:1)
这是一个Windows控制台unicode问题,您可以通过安装win-unicode-console库来修复它
$ pip install win-unicode-console
$ edit a.py
import win_unicode_console
win_unicode_console.enable()
print('non-gbk-character Résumé or 欧•亨利 works')
我在中文Windows 8中使用python 3.4进行了测试
答案 1 :(得分:0)
UnicodeEncodeError
表示您正在尝试打印文件名。如果os.lisdir()
出现问题,您应该看到UnicodeDecodeError
(解码,而不是编码)。
因为您使用Unicode路径名,os.listdir()
会返回容易解码的文件名;在Windows上,文件系统使用UTF-16编码文件名,并且可以在Python中轻松解码(sys.getfilesystemencoding()
告诉Python使用哪种编解码器。)
但是,Windows控制台使用不同的编码;在您的情况gbk
中,该编解码器无法显示UTF-16可以编码的所有不同字符。
您正在寻找print()
声明。您也许可以使用print(filename.encode('gbk', errors='replace'))
来尝试打印文件名;不可打印的字符将被问号替换。
或者,您可以使用b'F:\\music'
作为路径,并使用原始字节串而不是Unicode。