2016-11-15 2 views
0

При перечислении всех файлов на диск с:Кодирование проблемы при печати всех файлов диска

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(...) 

Конечно, # -*- coding: utf-8 -*- в моем .py файле.

+0

Есть, вероятно, каталоги или файлы в пути, которые не являются UTF-8 закодированных строк, поэтому при попытке распечатать их питон не знает, как расшифровать их. Я не думаю, что это имеет какое-то отношение к кодированию вашего .py-файла. – Billy

ответ

0

решаемый с:

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