問題
Q1: 為什麼 Python 輸出中文到csv檔後,用Excel開啟卻會亂碼?
Q2: 為什麼 Python 讀取文件首行多了”\ufeff”字符串,程式報錯?
問題一
Q1: 為什麼 Python 輸出中文到csv檔後,用Excel開啟卻會亂碼?
原因
Excel 以 ANSI 格式開啟,不會做編碼識別
解決方法
encoding採用 utf-8-sig 作為輸出即可。
1 | df.to_csv('123.csv',encoding='utf-8-sig') |
問題二
Q: Python 讀取文件首行多了”\ufeff”字符串,程式報錯?
1 | with open("%s.txt" % line, 'r', encoding='utf-8') as f1: |
要打開的路徑比預期A.txt多了一串字符”\ufeff”, 顯然無法正確打開文件.
原因
首行出現的”\ufeff“叫BOM(“ByteOrder Mark”),用來聲明該文件的編碼信息.
”utf-8“ 是以字節為編碼單元,它的字節順序在所有系統中都是一樣的,沒有字節序問題,因此它不需要BOM,所以當用”utf-8”編碼方式讀取帶有BOM的文件時,它會把BOM當做是文件內容來處理, 也就會發生上面的錯誤.
解決方法
encoding採用 utf-8-sig 作為讀取即可。
1 | with open("B.txt", 'r', encoding='utf-8-sig') as f: |