编码问题打印磁盘的所有文件时
问题描述:
当列出磁盘的所有文件:编码问题打印磁盘的所有文件时
import os
for path, subdirs, files in os.walk('d:\\'):
for name in files:
fname = os.path.join(path, name)
print 'hello %s' % fname
我得到:
[Decode error - output not utf-8]
类似的代码,我有时会:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 60: ordinal not in range(128)
如何解决这个问题?
注:我使用Python 2.7版与Windows 7我已经在SO有关UTF-8编码读取许多问题,并试图像各种各样的事情:
print name.encode('utf-8') # or utf8
print name.decode('utf-8')
print name.decode().encode(...)
当然我的.py文件中有# -*- coding: utf-8 -*-
。
答
解决了:
import os, sys
enc = sys.getfilesystemencoding()
for path, subdirs, files in os.walk('d:\\'):
for name in files:
fname = os.path.join(path, name).decode(enc) # decode the inputs
print fname.encode('utf8') # encode the outputs
有可能不属于UTF-8编码字符串显示目录或文件的路径,所以当你试图将它们打印蟒蛇不知道如何来解码。我认为这与你的.py文件的编码没有任何关系。 – Billy