2017-07-06 108 views
1

特殊字符作爲我的python腳本的一部分,我測試,看看這兩個文件使用相同的尺寸:Python的 - 「系統找不到指定文件」由於文件名

os.path.getsize(dir_file) # dir_file = root path + filename joined 

但當我遇到一個名稱中包含特殊字符的文件時(例如Ü),我得到以下錯誤:WindowsError: [Error 2] The system cannot find the file specified替換爲特殊字符\xf6

我已經試過編碼dir_file爲UTF-8,像這樣:

unicode(dir_file, 'utf-8') # method 1 
dir_file.encode('utf-8') # method 2 

但是,這使我有以下錯誤:UnicodeDecodeError: 'ascii' codec can't decode byte 0xf6 in position 79: ordinal not in range(128)

不知道如何解決這個字符編碼問題。

+2

我們可以猜到,但是您應該在標籤中指定您的Python版本。 Python 2和Python 3處理Unicode的方式非常不同。 –

+0

你是如何初始化和準確加入變量dir_file的內容的? – anneb

+1

@RoryDaulton哦,好的。我使用Python 2 – sookie

回答

1

嘗試使用sys.getfilesystemencoding()來獲得文件系統的編碼以闡明您的需求。

然後,確保您在參數傳遞的字符串使用相同的編碼

if isinstance(dir_file, str): 
print "ascii" 
elif isinstance(dir_file, unicode): 
print "unicode" 

給你的結果,我會更新的答案。

+0

當我在將根目錄字符串輸入到'os.walk()'之前解碼爲「unicode」時,我使用它。但是,當我在大量文件上測試腳本時,每1000個文件中大約有1個文件會產生'IOError'(當我嘗試打開它時)或'UnicodeEncodeError'(當我嘗試打印目錄時)。我運行了'sys.getfilesystemencoding()'並得到了'mbcs'作爲結果(如果有幫助) – sookie

+0

在打印之前,通過將字符串編碼爲utf-8解決了'UnicodeEncodeError'問題。 'IOError'仍然沒有我 – sookie

相關問題