![](/img/trans.png)
[英]Why is my defaultencoding ‘utf-8’ with python 2.7.2?
[英]Why does python's open() function mangle my utf-8 files?
這是一個奇怪的問題,可能是由於 python 更新,因為它昨天運行良好,沒有任何變化。 開始了:
我有一個程序可以打開 utf-8 文件(使用重音字符等,而不僅僅是 ansi 字符)。 當我使用open(file, encoding="utf-8-sig").read()
非ansi 字符會被破壞,如我的終端中所示:
但是,當我將編碼設置為"ansi"
,字符完全正常!
這對我來說完全是個謎。 如前所述,昨天這工作正常。 我已經多次檢查過這些文件確實是 utf-8。 不知道是open()函數的問題,還是顯示字符時print()函數的問題。 無論如何,這很奇怪。 "ansi"
版本將是一個解決方案,但問題是它會導致Lark出現問題,它使用打開的文件的內容。
在我在這里給出的屏幕截圖中,代碼是基本的:
with open(str(GRAMMAR), "r", encoding="utf-8-sig") as grammar:
print(grammar.read())
什么可能這個問題所致?
我剛剛注意到一些事情: ansi
不是編碼。 編碼的正確名稱是ascii
。 這意味着當我輸入encoding="ansi"
,python 忽略了我要求它設置和讀取文件作為其默認編碼的編碼,通常是 utf-8。 這並不能解釋為什么它不適用於utf-8-sig
或為什么 Lark 對我尖叫,但這特定於我的情況。 因此,對於此問題的未來讀者,請檢查兩件事:
ascii
,而不是ansi
。在 Windows 機器上,Python 將名稱“ansi”識別為“mbcs”編解碼器的別名,定義為
僅限 Windows:根據 ANSI 代碼頁 (CP_ACP) 對操作數進行編碼。
所以 ansi 是一種有效的編碼,但它與 ASCII 或 UTF-8 不同,因此存在明顯的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.