我試過編碼/解碼與選項'surrogatepass'和'surrogateescape'的各種組合無濟於事。我不確定這是什麼格式(它甚至可能是Autoit中的一個錯誤),但我知道有一個事實,因爲至少有一個在線utf解碼器是正確的。在在線轉換器網站上,我將文件指定爲utf8並將輸出指定爲utf16,並且輸出如預期。我如何從Python3中的Éphémère獲得?
0
A
回答
1
我的問題是在文件閱讀過程中。我通過在open()的選項中指定encoding ='utf-8'來解決它。
open(filePath, 'r', encoding='utf-8')
3
這個問題被稱爲mojibake,如果您有與UTF-8編碼的文本流出現您的具體情況,和您Windows-1252解碼它(這是ISO 8859-1一個超集)。
因此,如果您已經有found out,則必須使用UTF-8解碼此文件,而不是使用默認的Python編碼(在您的情況下似乎是Windows-1252)。
讓我們來看看爲什麼這些特定的亂碼字符出現在你的榜樣,即:在É
- É在é
- A的發生在è
下表總結了發生了什麼事情:
所有的E的,E和E的非ASCII字符,並且它們使用UTF-8編碼的2字節長的代碼。
例如,對於E中的UTF-8碼是:
11000011 10001001
在另一方面,Windows-1252是一個8位的編碼,即,其編碼其字符的每一個字符設置爲8位,即一個字節。因此,如果您現在使用Windows-1252解碼位序列11000011 10001001
,則Windows-1252將其解釋爲兩個1字節代碼,每個代碼表示單獨的字符,而不是代表單個字符的2字節代碼:
- 第一字節
11000011
(C3
十六進制)恰好是字符Ã(Unicode代碼點U + 00C3)的Windows的1252碼。 - 第二個字節
10001001
(89
,十六進制)恰好是字符‰(Unicode代碼點U + 2030)的Windows-1252代碼。
您可以查看這些映射here。
所以,這就是爲什麼你的解碼呈現Ã而不是É。同樣適用於其他非ASCII字符é和è。
相關問題
- 1. 如何在Python3中獲得「舊」zip()?
- 2. 如何在python3中模擬http.server以獲得更快的unittest?
- 3. 如何獲得Python3中已註冊的atexit函數列表?
- 4. 獲得psycopg2誤差python3
- 5. Python3從值中獲取鍵?
- 6. 如何從我從Web服務獲得的響應中獲得準確的值?
- 7. 我如何獲得的memberOf從LDAP DirContextOperations
- 8. 如何在Python3中獲得關閉結果
- 9. 如何在Python3.x中獲得Python2.x`map`功能?
- 10. Java JaxB代,我如何從我的xsd中獲得bigDecimal?
- 11. iPhone,我如何從我的NSDictionary數組中獲得兩倍?
- 12. 如何用python3支持windows獲得Neovim的構建?
- 13. 我如何從Flurl獲得Access_Token
- 14. Asana:我如何從asana獲得Worksapce ID
- 15. 我如何從json獲得價值?
- 16. 我如何從NSString獲得類?
- 17. 我如何從Flickr獲得TOP照片
- 18. 我如何從UITableView獲得行數
- 19. 我如何從Exoplayer獲得一個audiosessionId?
- 20. 我如何從facebook獲得read_stream權限
- 21. 我如何獲得一個NSManagedObjectID從
- 22. Android:我如何從mediaplayer獲得振幅?
- 23. 我如何從NetSuite獲得稅碼?
- 24. 我如何從標籤獲得寬度?
- 25. 我如何從jasperserver獲得報告?
- 26. 我如何從linkedin獲得r_contactinfo
- 27. 我如何從python獲得C++結構?
- 28. 如何獲得我的Ribbontabs?
- 29. 我如何獲得的UIImageView
- 30. 如何獲得從的argv []