1
  • 操作系统: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其自身内部的一些奇怪编码的文件或文件夹。如何找到此错误的根源?

4

2 回答 2

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 中测试过

于 2015-03-21T14:45:30.060 回答
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'))尝试打印文件名;无法打印的字符将替换为问号。

或者,您可以使用 ab'F:\\music'作为路径并使用原始字节串而不是 Unicode。

于 2012-10-13T20:52:53.837 回答