為什麼網頁會出現亂碼?一次搞懂 ASCII、UTF-8 與 Unicode 的愛恨情仇

2026-01-31 10:52 | By justin
(Updated: 2026-01-31 10:52)

為什麼網頁會出現亂碼?一次搞懂 ASCII、UTF-8 與 Unicode 的愛恨情仇

你一定有過這種經驗:打開一個純文字檔,或是瀏覽某個年代久遠的網頁,結果看到的不是正常的中文,而是一堆像是「årw」或是「锟斤拷」之類的奇怪符號。 這時候你可能會想:「是不是檔案壞掉了?」還是「電腦中毒了?」 其實,這通常不是檔案壞了,而是電腦拿錯了「字典」來翻譯這些內容。這背後牽涉到電腦科學中最基礎,但也最容易造成災難的概念——字元編碼 (Character Encoding)。

電腦其實是個文盲

在電腦的眼中,根本沒有「A」、「B」、「C」或是「你」、「我」、「他」這些字。電腦只認識兩個東西:0 和 1。

當我們在鍵盤上打出一個字,電腦會把它轉換成一串數字存起來;當我們要閱讀時,電腦再把這串數字轉換回圖像顯示在螢幕上。這個「數字」與「文字」之間的對照表,就是我們所謂的編碼。

如果存檔的人用的是 A 對照表,而讀檔的人用的是 B 對照表,翻譯出來的結果就會牛頭不對馬嘴,這就是亂碼的真相。


遠古時代的字典:ASCII 在電腦剛發明的早期,主要的使用者都是講英文的(特別是美國)。因此他們制定了一套標準叫做 ASCII。 這套規則非常簡單,只用 1 個位元組(Byte)中的 7 個位元,就能表示 128 個符號。這包含了: 所有英文字母(大小寫) 數字 0-9 基本標點符號 例如,大寫字母 A 在 ASCII 裡的代碼是 65,小寫 a 是 97。這對英語系國家來說完美無缺,但對世界其他地方來說卻是個災難——因為表裡面根本沒有中文、日文或德文的位置!


萬國亂世:Big5 與 GBK 的戰爭

為了讓電腦能顯示中文,台灣和香港的工程師發明了 Big5 (大五碼),而中國則發明了 GBK。

這些編碼通常使用 2 個位元組來代表一個中文字。 例如:「你」這個字,在 Big5 裡的代碼是 A741。 但麻煩來了:大家各做各的字典。 同樣的一串數字 A741,在 Big5 字典裡是「你」,但在另一種編碼字典裡,可能代表完全不同的字,甚至是無效的符號。這就是為什麼以前我們玩一些舊遊戲或開舊檔案時,常常需要「轉換語系」,否則文字就會變成一團混亂。

黑色菱形問號與「锟斤拷」是怎麼來的? 你在網頁上最常看到的黑色菱形問號,它的正式名稱是 Replacement Character (替換字元)。 這通常發生在:你的瀏覽器使用現代的 UTF-8 編碼去解讀網頁,但遇到了一串它「無法識別」的數據(不符合 UTF-8 規則)。瀏覽器為了告訴你「這裡有東西我看無」,就會顯示「」來代替。 而另一個常見的亂碼「锟斤拷」,則是因為 UTF-8 編碼的檔案被錯誤地用 GBK 編碼開啟,經過一系列錯誤的轉換後所產生的經典亂碼。 救世主降臨:Unicode 與 UTF-8

為了結束這個混亂的局面,世界各地的科學家決定聯手建立一套包含地球上所有語言的「超級大字典」,這就是 Unicode (萬國碼)。

Unicode 為世界上的每一個字(包含 Emoji)都編了一個獨一無二的「身分證號碼」。不管你是哪一國人,U+6211 永遠代表「我」這個字。 有了 Unicode 這個超級字典後,我們還需要一個方法把它存進電腦裡,這時候 UTF-8 就登場了。 UTF-8 是一種聰明的儲存方式。

遇到英文,它只用 1 個 byte 存(跟 ASCII 一樣省空間)。 遇到中文,它通常用 3 個 byte 存。 遇到 Emoji,它用 4 個 byte 存。

給開發者的建議:擁抱 UTF-8

現在幾乎所有的現代系統(Linux, macOS, Windows 10+)、網頁技術、程式語言(Python 3, Go, Rust)都預設使用 UTF-8。 為了避免未來的麻煩,這裡有兩個小建議:

統一編碼:在寫程式、存 CSV 檔、設定資料庫時,永遠優先選擇 UTF-8(資料庫建議選 utf8mb4 以支援 Emoji)。

檢查編輯器:確認你的 VS Code 或 Notepad++ 右下角顯示的是 UTF-8,而不是 Big5 或 ANSI。

只要全世界都用同一本字典,溝通就不再會有障礙。下次再看到亂碼,你就知道這背後其實是一場「拿錯字典」的誤會囉!


0 留言

目前沒有留言

發表留言
回覆