1
  • OS: Windows 7、64ビット
  • パイソン 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( EncodeではなくDecode ) が表示されるはずです。

Unicode パス名を使用しているため、os.listdir()すぐにデコードされたファイル名が返されます。Windows では、ファイルシステムは UTF-16 を使用してファイル名をエンコードし、それらは Python で簡単にデコードされます (sys.getfilesystemencoding()使用するコーデックを Python に指示します)。

ただし、Windows コンソールはのエンコードを使用します。あなたの場合gbk、そのコーデックは UTF-16 がエンコードできるすべての異なる文字を表示することはできません。

print()ここでステートメントを探しています。おそらくprint(filename.encode('gbk', errors='replace'))、代わりにファイル名を試して印刷するために使用できます。印刷できない文字は疑問符に置き換えられます。

または、パスとしてa を使用しb'F:\\music'て、Unicode の代わりに生のバイト文字列を操作することもできます。

于 2012-10-13T20:52:53.837 に答える