2015-09-14 80 views
1

我見過很多類似的問題,但都沒有解決我的問題。我試圖打開使用Unicode文件名的文件,但得到的錯誤:python [Errno 22] invalid mode('wb')or filename:u'Escuela Sab xe1tica Part 2.doc'

[錯誤22]無效的模式(「WB」)或文件名:u'Escuela審計局\ xe1tica部分2.doc」

我試過使用open,codecs.open和io.open來打開文件(我認爲這對於二進制文件來說並不重要,但不管)。沒有骰子。我覺得線索可能是文件名:

u'Escuela審計局\ xe1tica部分2.doc」

打印時,此文件名工作正常:

埃斯庫埃拉Sabática部分2.doc

但我認爲這很奇怪,錯誤將它打印爲u'... \ xe1 ...'而不是u'... \ uxxx ...'。我仍然不熟悉unicode,所以這是我的懷疑。我試過在沒有成功打開之前編碼和解碼文件名('utf-8')。

編輯:版本是python 2.7.3。代碼片段:

with open(to_path, "wb") as to_file: 
    to_file.write(f.read()) 

錯誤可追溯到「開放」線,代碼適用於文件,而不在文件名中的Unicode。

+0

是什麼版本的Python?你應該發佈你正在運行的代碼片段,這會引發這個錯誤。 – roeland

+1

您應該_ALLways_提及帶有Unicode問題的Python版本(最好使用適當的標籤),因爲Python 3中的Unicode處理與Python 2非常不同。而且對於這個問題,瞭解操作系統和文件系統也很好。 FWIW,Windows NTFS文件系統使用UTF-16編碼。 –

+0

上面添加的版本和代碼片段。 – hawkjo

回答

0

這工作得很好,我對Python的2.7.10:

with open(u'Escuela Sab\xe1tica Part 2.txt', 'wb') as f: 
    f.write('test') 

>>> ls Esc* 

埃斯庫埃拉Sabática部分2.doc(我使用文本而不是代碼示例以顯示口音)。

>>> cat Esc* 
test 

也許你正在閱讀而不是寫作?

相關問題