使用os.listdir时的UnicodeEncodeError

时间:2012-10-13 20:42:35

标签: python

  • 操作系统:Windows 7,64位
  • Python 3.1.3

当我尝试这样做时

os.listdir("F:\\music")

我明白了

UnicodeEncodeError: 'gbk' codec can't encode character '\xe3' in position 643: illegal multibyte sequence

os.listdir适用于其他目录,因此问题的原因显然是F:\music本身内的一些奇怪编码的文件或文件夹。如何找到此错误的来源?

2 个答案:

答案 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。