MaDi's Blog

一個紀錄自己在轉職軟體工程師路上的學習小空間

0%

Python輸出or讀取的亂碼問題

問題

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
2
3
with open("%s.txt" % line, 'r', encoding='utf-8') as f1:

FileNotFoundError: [Errno 2] No such file or directory: '\ufeffA.txt'

要打開的路徑比預期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: