TXT 開啟是亂碼怎麼辦?Big5 和 UTF-8 是怎麼回事
TXT 檔案裡存的只是一串位元組。開啟後變成亂碼,通常不是檔案壞了,而是開啟它的軟體用了與存檔時不同的編碼去解讀這串位元組。繁體中文的 TXT 最常見的編碼是 UTF-8 和 Big5:換一種編碼重新開啟,或者把檔案轉成 UTF-8,多數亂碼都能恢復。動手之前,請先複製一份原始檔案。
編碼是什麼
電腦儲存文字時,要依一套規則把每個字轉成位元組,這套規則就是編碼;開啟檔案時,軟體再依某種編碼把位元組轉回文字。存檔與開啟用的是同一種編碼,文字就正常;用的不是同一種,就會出現亂碼。
同一個中文字,在不同的編碼裡是不同的位元組。以「我們」為例:
| 編碼 | 「我們」存成的位元組(十六進位) |
|---|---|
| UTF-8 | E6 88 91 E5 80 91 |
| Big5 | A7 DA AD CC |
在台灣常遇到的是這幾種編碼:
- Big5:台灣長期使用的繁體中文編碼,舊的文字檔、早年網站流傳下來的小說,很多都是 Big5。繁體中文 Windows 的記事本把它叫作「ANSI」:在繁體中文的 Windows 上,ANSI 指的就是 Big5,正確來說是微軟的 CP950,比標準的 Big5 多了少數幾個字元,例如歐元符號「€」。
- UTF-8:現在通行的編碼,幾乎能表示所有語言的文字,網頁和多數新軟體都使用它,較新的 Windows 記事本也預設以 UTF-8 存檔。
- GBK/GB18030:中國大陸的簡體中文編碼。來自中國大陸網站的簡體 TXT 常用這一種,在繁體中文的電腦上直接開啟,容易被當作 Big5 而出現亂碼。
從亂碼的樣子判斷是哪種情況
| 亂碼的樣子 | 例子 | 原因 | 怎麼辦 |
|---|---|---|---|
| 一串罕見的字夾雜「�」(菱形裡的問號) | 「你好」顯示為「雿�憟�」,「小說」顯示為「撠�隤�」 | UTF-8 的檔案被當作 Big5 開啟 | 改用 UTF-8 開啟 |
| 一串「�」,夾雜零星的英文字母 | 「你好」顯示為「�A�n」,「小說」顯示為「�p��」 | Big5 的檔案被當作 UTF-8 開啟 | 改用 Big5 開啟,或轉成 UTF-8 |
| 一串罕見的中文字,完全不成句 | 「我们」顯示為「扂蠅」,「你好」顯示為「斕疑」 | 簡體中文(GBK)的檔案被當作 Big5 開啟 | 改用 GBK 或 GB18030 開啟,或轉成 UTF-8 |
| 反覆出現「嚙」字 | 「嚙踝蕭」,或「你好」最後變成「嚙璀嚙緯」 | 原文曾被換成「�」並存檔,之後又被當作 Big5 讀出 | 無法從這個檔案還原,見下文 |
無法解讀的位元組,各家軟體顯示的方式不盡相同,實際看到的亂碼大致像這樣,細節可能略有出入。
怎樣換編碼開啟,或轉成 UTF-8
Windows 記事本
記事本適合處理「在電腦上顯示正常,換到手機或其他軟體就變亂碼」的檔案,這類檔案多半是 Big5:
- 用記事本開啟檔案,確認文字顯示正常。
- 選擇「檔案」›「另存新檔」,在對話方塊下方的「編碼」中選擇「UTF-8」,換一個檔名儲存。
另存新檔是把畫面上顯示的文字依新的編碼寫出去。如果記事本裡顯示的已經是亂碼,另存新檔只會把亂碼固定下來,這時請改用 VS Code。簡體中文的 GBK 檔案在繁體中文的記事本裡常常就是這種情況。
VS Code
VS Code 視窗右下角的狀態列會顯示目前檔案的編碼,例如「UTF-8」。點按它,可以選擇:
- 「以編碼重新開啟」:只換一種編碼解讀,不改動檔案。出現亂碼時先用它,在 UTF-8、Big5 與 GBK 之間換著試,直到文字顯示正常。
- 「以編碼儲存」:把目前顯示的文字依所選的編碼寫回檔案。文字顯示正常之後,再用它選擇 UTF-8 儲存。
macOS:用 iconv 指令轉換
macOS 內建 iconv 指令。開啟「終端機」(在「應用程式」›「工具程式」裡),執行下面的指令,把兩個檔名換成實際的路徑(把檔案拖進終端機視窗,就能填入它的路徑):
iconv -f BIG5 -t UTF-8 原始檔案.txt > 新檔案.txt
-f 後面是原本的編碼,-t 後面是要轉成的編碼。轉換結果寫進新檔案,原始檔案不變;新檔案不要與原始檔案同名,否則原始檔案會先被清空。
- 出現「Illegal byte sequence」,表示原始檔案不是 Big5(可能本來就是 UTF-8),或者含有 Big5 以外的字。可以把
BIG5換成CP950再試。 - 簡體中文的檔案,把
BIG5換成GB18030。 - 原本的編碼選錯時,iconv 不一定會報錯,可能照樣寫出一串怪字,例如把簡體中文的檔案當成 Big5 轉換。轉換後請開啟新檔案看一眼,確認文字正常。
手機上的閱讀器
手機上的 TXT 閱讀器與電子書 App,一般可以在設定或開啟檔案的選項中手動選擇編碼,例如 UTF-8 或 Big5。自動辨識出錯時,手動換一種試試。
看到亂碼時,先不要存檔
換一種編碼重新開啟不會改動檔案。但如果在亂碼的狀態下存檔,軟體會把畫面上的亂碼寫回檔案,原本的位元組就被覆蓋了。Big5 的檔案被當作 UTF-8 開啟時,讀不懂的位元組已經被換成佔位符號「�」,而這個符號不記得原本是哪個字,一旦存檔,這部分原文就找不回來了。
「嚙踝蕭」就是這樣來的:「�」在 UTF-8 裡是 EF BF BD 三個位元組,兩個「�」連在一起的六個位元組被當作 Big5 解讀,正好是「嚙踝蕭」三個字;在簡體中文的環境裡,同樣的六個位元組會顯示為「锟斤拷」。看到它,表示原本的文字早已被取代,換哪一種編碼都無法還原,只能去找出現亂碼之前的副本或備份。
所以處理亂碼之前,請先複製一份原始檔案;轉換時存成新檔案,確認沒問題後再刪除舊的。
以後怎樣避免亂碼
- 新增和儲存 TXT 時一律選擇 UTF-8,不再用 ANSI(Big5)存檔。Big5 沒有的字,例如簡體字與 emoji,存成 Big5 時會遺失。
- 收到 Big5 或 GBK 編碼的檔案,先轉成 UTF-8,再編輯或轉傳。
純純寫作的 TXT 編碼
純純寫作(Pure Writer)是一款寫作用的文字編輯器,有 Android 版、iOS 版與桌面版。
匯出:純純寫作匯出的 TXT 與 MD 檔案都使用 UTF-8 編碼。部分閱讀器不支援或無法自動辨識 UTF-8,開啟後會顯示亂碼,這時請在閱讀器中把文字編碼手動切換為 UTF-8,或換用其他閱讀器開啟。詳見使用手冊的匯出的 TXT 檔案在閱讀器中開啟是亂碼怎麼辦?
匯入:三個版本的「從其他 App 匯入」在匯入文字檔時會自動辨識編碼,認得 UTF-8、UTF-16、GB18030(涵蓋 GBK)、Big5 與 Shift_JIS。辨識得不對時,可以在匯入預覽中手動切換「文字編碼」;原始檔案不會被改動。入口見使用手冊的如何開啟外部文件?
常見問題
TXT 在閱讀器或電子書 App 裡開啟是亂碼怎麼辦?
在閱讀器的設定中把文字編碼手動換成 UTF-8 或 Big5,哪一種顯示正常就用哪一種;簡體中文的檔案則試試 GBK。如果閱讀器不能切換編碼,可以先在電腦上用 VS Code 或 iconv 把檔案轉成 UTF-8,再匯入閱讀器。純純寫作匯出的 TXT 是 UTF-8 編碼。
簡體中文的 TXT 在繁體中文的電腦上是亂碼怎麼辦?
這類檔案多半是 GBK 或 GB18030 編碼,在繁體中文的 Windows 上常會被當作 Big5 解讀,變成一串不成句的罕見字。請用 VS Code 的「以編碼重新開啟」選擇 GBK,文字正常後再用「以編碼儲存」存成 UTF-8;在 macOS 上可以用 iconv -f GB18030 -t UTF-8 轉換。
「嚙踝蕭」能恢復嗎?
無法從這個檔案本身恢復。「嚙踝蕭」表示原文已經被換成佔位符號「�」並存過檔,原本的位元組不在檔案裡了。只能去找出現亂碼之前的副本、備份,或者重新從來源取得這個檔案。
UTF-8 的 BOM 是什麼,存檔時要不要選?
BOM 是寫在檔案開頭的三個位元組(EF BB BF),用來標明這個檔案是 UTF-8 編碼。存檔時一般選不含 BOM 的 UTF-8 即可;如果某個較舊的軟體開啟不含 BOM 的 UTF-8 檔案時出現亂碼,再試試含 BOM 的版本。反過來,不認得 BOM 的軟體可能會在檔案開頭多顯示一個奇怪的字元。
為什麼同一個 TXT 在電腦上正常,在手機上是亂碼?
多半是因為這個檔案是 Big5 編碼:繁體中文 Windows 上的記事本等軟體會依 Big5 解讀,所以顯示正常;手機上不少 App 預設依 UTF-8 解讀,就顯示成了「�」。在電腦上用記事本把它另存成 UTF-8 編碼的新檔案,再傳到手機上即可。