5
A
回答
16
你在評論中提到你只需要檢測UTF-8。如果您知道替代方案僅包含單字節編碼,那麼通常有一種解決方案。
如果您知道它是UTF-8或單字節編碼(如latin-1
),請嘗試先以UTF-8打開它,然後以其他編碼打開它。如果文件僅包含ASCII字符,則即使打算用作其他編碼,它也會以UTF-8打開。如果它包含任何非ASCII字符,則幾乎總能正確檢測到兩者之間的正確字符集。
try:
# or codecs.open on Python 2
filedata = open(filename, encoding='UTF-8').read()
except:
filedata = open(filename, encoding='other-single-byte-encoding').read()
最好的辦法是使用chardet
package from PyPI,直接或通過從UnicodeDamnit
BeautifulSoup:
chardet的1.0.1
通用編碼檢測器
檢測:
- Big5,GB2312,EUC-TW,HZ-GB-2312,ISO-2022-CN(繁體和簡體中文)UTF-8(2種變體),UTF-32(4種變體)
- 中國)
- EUC-JP,SHIFT_JIS,ISO-2022-JP(日本)
- EUC-KR,ISO-2022-KR(韓國)
- KOI8-R,MacCyrillic,IBM855,IBM866,ISO-8859 -5,窗-1251(西裏爾字母)
- ISO-8859-2,窗-1250(匈牙利)
- ISO-8859-5,窗-1251(保加利亞)
- 個窗口1252(英文)
- ISO-8859-7,窗戶-1253(希臘)
- ISO-8859-8,窗戶-1255(視覺和邏輯希伯來文)
- TIS-620(泰國)
需要Python 2.1或更高版本
但是,某些文件將在多種編碼有效,因此chardet
也不是萬能的。
2
可靠嗎?
一般來說號,一個字節序列是沒有意義的,除非你知道如何解釋它 - 這也適用於文本文件,還整數,浮點數等
但是,也有辦法通過查看字節順序標記(如果有的話)和文件的第一個塊(以查看哪個編碼產生最明智的字符)來猜測文件的編碼。 chardet
庫在這方面非常出色,但請注意這只是一種啓發式,儘管它是一個相當強大的庫。
相關問題
- 1. 檢測utf8編碼錯誤
- 2. 如何檢測使用microsoft.bat文件是否爲空文件?
- 3. 如何檢測文件的編碼?
- 4. 如何使用Delphi檢測文本文件的字符編碼?
- 5. Eclipse是否可以使用特定文本標題檢測文件編碼?
- 6. 如何使用RandomAccessFile讀取UTF8編碼的文件?
- 7. 如何檢測是否必須應用utf8解碼或對字符串進行編碼?
- 8. 如何使用mongoengine.to_json()方法utf8編碼
- 9. 如何以編程方式檢測png文件是否使用c#.NET損壞?
- 10. 如何使用jQuery檢測文件上傳是否已完成?
- 11. EmguCV:如何檢測文件是否已達到使用
- 12. 我如何檢測文件是否已使用Cocoa重命名?
- 13. 如何使用Apache Tica TypeDetector檢測文件是否爲mp3?
- 14. 檢查NSData是否包含ASCII或UTF8編碼
- 15. 如何檢測文本文件的編碼/代碼頁
- 16. 是否可以使用批處理文件檢測文件格式和文件編碼?
- 17. 如何使用Ruby編程語言檢測cookie是否存在?
- 18. 如何使用JQuery檢測文件輸入是否有文件被選中?
- 19. 用於檢測特定文件是否由ioncube編碼的模式
- 20. 如何檢測項目文件夾中是否存在文件?
- 21. 用PHP檢查csv文件是否採用UTF-8編碼
- 22. 如何使用phpexcel檢查xls文件是否爲可編輯文件?
- 23. 在PyCharm中讀取UTF8編碼文件
- 24. python UTF16LE文件以UTF8編碼
- 25. Perl編碼 - 將文件保存到UTF8
- 26. 如何檢測objective-c中的文本文件編碼?
- 27. objective-c如何用UTF8編碼NSArray?
- 28. 在PHP中檢測文件編碼
- 29. eclipse自動文件編碼檢測
- 30. 如何檢測用戶上傳的文件是否大於post_max_size?
重複? http://stackoverflow.com/questions/436220/python-is-there-a-way-to-determine-the-encoding-of-text-file和http://stackoverflow.com/questions/2144815/how- python – CppLearner 2012-04-14 18:21:07
我想要檢測UTF-8(真/假),而不是每個編碼。 – Riki137 2012-04-14 18:27:54
你可以用高信度猜測,除非你知道更多關於文件的內容,你不能確定。例如,文件的類型(在這種情況下,您要求輸入文本文件)。你大部分時間都可以猜到。我去年碰到過幾次這就是爲什麼:) – CppLearner 2012-04-14 18:30:44