我知道有很多關於Python 2上的「UTF-8」編碼問題的討論,但我無法找到解決方案給我的問題到目前爲止。我目前正在創建一個腳本來獲取文件的名稱並用xlwt將其鏈接,以便通過電子表格中的點擊訪問該文件。問題是,這些文件的一些名稱包含非ASCII字符。Python 2.7「拉丁-1」編碼,而不是「UTF-8」
問題1
我用下面的一行來檢索文件的名稱。順便說一句,文件夾中只有一個文件。
>>f = filter(os.path.isfile, os.listdir(tmp_path))[0]
然後
>>print f
'521001ldrAvisoAcionistas(Retifica\xe7\xe3o)_doc'
>>print sys.stdout.encoding
'UTF-8'
>>f.decode("UTF-8")
*** UnicodeDecodeError: 'utf8' codec can't decode byte 0xe7 in position 76: invalid continuation byte
從這裏瀏覽的討論,我意識到, 「\ XE7 \ xe3o」 不是 「UTF-8」 編碼。運行下面的行似乎支持這一點。
>>f.decode("latin-1")
u'521001ldrAvisoAcionistas(Retifica\xe7\xe3o)_doc'
我的問題是那麼,爲什麼變量f正在編碼「Latin-1的」當系統編碼設置爲「UTF-8」?
問題2
雖然f.decode(「拉丁-1」)給我我想要的輸出,我仍然無法將可變電源到電子表格中的超鏈接功能。
>>data.append(["File", xlwt.Formula('HYPERLINK("%s";"%s")' % (os.path.join(dl_path,f.decode("latin-1")),f.decode("latin-1")))])
*** FormulaParseException: can't parse formula HYPERLINK("u'H:\\Mad Lab\\SE Doc Crawler\\bovespa\\download\\521001ldrAvisoAcionistas(Retifica\xe7\xe3o)_doc's;"u'521001ldrAvisoAcionistas(Retifica\xe7\xe3o)_doc's)
顯然,最後的雙引號被吃掉了,被一個「's」後綴取代。有人可以幫助解釋這裏發生了什麼嗎? 0.0
哦,如果有人可以建議上述問題2的解決方案,那麼我將非常感謝 - 因爲你會把我的週末從痛苦中拯救出來!
在此先感謝所有!
文件系統編碼總是可以與區域設置(stdout和stdin編碼)不同。而是看看'sys.getfilesystemencoding()'。 –
你能告訴我什麼操作系統,如果你使用控制檯或IDLE,PyCharm,Intellij或Eclipse等IDE,那麼我可以給你一個特定的答案嗎? –
@MartijnPieters sys.getfilesystemencoding()拋出「mbcs」 – kerwei