我在OSX機器上運行Python 2.7。我正在嘗試在smb上分享os.walk。Python os.walk()變音符u' u0308'
for root, dirnames, filenames in os.walk("./test"):
for filename in filenames:
print filename
matchObj = re.match(r".*ö.*",filename,re.UNICODE)
如果我使用它的工作原理,只要文件名不包含變音符號上面的代碼。 在我的殼的變音打印正常,但當我將它們複製回格式化Textdeditor一個UTF8(在我的情況崇高),我得到:
screenshot 預計:
filename.jpeg
filename_ö.jpg
當然的正則表達式失敗接着就,隨即。 如果我硬編碼的文件名,如:
re.match(r".*ö.*",'filename_ö',re.UNICODE)
它工作正常。
我想:
os.walk(u"./test")
filename.decode('utf8')
但給我:
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0308' in position 10: ordinal not in range(128)
u'\u0308'
是變音符號上方的點。
我在看我愚蠢的東西嗎?
在Python 2.x中,你需要一個Unicode對象傳遞給'os.walk()'否則你會(得到一個編碼字符串,使用Unix的原始文件名或8位字符集在Windows在Mac OS X中,文件名始終是UTF-8編碼) –