小村軟體有限公司
CE101

用圖解與練習理解字元編碼

用 Excel 打開 CSV,日文內容全變成「縺薙s縺ォ縺。縺ッ」。郵件的主旨變成一串符號。存進資料庫的名字變成「????」— 亂碼明明是家常便飯,但被問到原因時卻意外地難以說明。本課程的目標不是死背處置方法,而是讓你看到亂掉的畫面時,能自己推理出「這是用哪種編碼寫入的位元組序列,被當成了哪種編碼來讀取」。先用圖掌握機制,再親手組出 UTF-8 的位元組序列,最後以貼近實務的亂碼案例做推理收尾。

圖 → 號碼 → 位元組序列 → 推理 共 43 題 瀏覽器內評分 localStorage 儲存
所需時間
3〜4 小時
題目數
共 43 題
形式
7 章 + 小題 + 模擬器
費用
免費
顯示同一串位元組 E3 81 AB,以 UTF-8 讀取是日文字元「に」、以 Shift_JIS 讀取是「縺ォ」、以 Latin-1 讀取是「ã«」的圖

檔案的實體只有位元組序列,並沒有掛著「這是什麼編碼」的標籤。同一串位元組,讀法不同就會看成不同的字元 — 這一張圖是整個課程的出發點。

本課程的特色

正文下方緊接小題
採用讀完馬上解 1〜3 題的結構,讓你不容易在「自以為懂了」的狀態下往前跳。
親手組出 UTF-8
日文字元「あ」U+3042 變成 E3 81 82 這 3 個位元組的過程,會由你自己以位元填入的方式親手計算。
位元組序列模擬器
在第 3 章的模擬器輸入任何字串,就能親眼確認碼位、UTF-8 位元組序列、UTF-16 碼元,甚至「被當成 Shift_JIS 誤讀後的模樣」。
瀏覽器內評分、無需註冊
全部 43 題都在瀏覽器內評分,結果只儲存在你瀏覽器的 localStorage,不會送出任何資料到伺服器。

貫穿本課程的一種觀點

字元在電腦內部永遠以 2 個階段來處理。學會把這 2 個階段分開思考,就是本課程的全部。

第 1 階段:號碼(碼位)
由字元集決定哪個字元編上哪個號碼。在 Unicode 中,日文字元「あ」= U+3042。(第 2 章)
第 2 階段:位元組序列(編碼)
由編碼決定如何把號碼變成位元組序列。以 UTF-8 而言,U+3042 → E3 81 82。(第 3〜5 章)
亂碼的固定套路
檔案上沒有掛著編碼的標籤,所以「寫入的編碼」與「讀取的編碼」一旦錯位,看起來就是別的字元。(第 1、6、7 章)

本課程的口訣:看到亂碼時,不要就此停止思考,請問自己 — 這是用哪種編碼寫入的位元組序列,被當成了哪種編碼來讀取?

章節構成

學習訣竅

  1. 請按照正文 → 緊接其後的小題的順序進行。與其累積到最後再解題,讀完立刻解題更容易記住。
  2. 第 3 章的位元填入,請務必在紙上寫下二進位親手操作。只要自己推導過一次 E3 81 82,UTF-8 就會從「背誦科目」變成「可以計算的東西」。
  3. 請在第 3 章的模擬器輸入自己的名字或工作上會處理的字串。位元組數與字元數的落差會變成親身體感。
  4. 在第 7 章的案例題卡關時,只要回到對應的章節複習 1〜2 輪即可,不需要整個重來。

開始前的前提

  • 只要有處理過文字檔或 CSV 的經驗就足夠。不要求程式設計經驗。
  • 十六進位只需要「用 0〜9 與 A〜F 表示數字的寫法」這種程度的前提,讀法會在章節中練習。
  • 二進位與十六進位的相互轉換(4 個位元 = 十六進位 1 位數)只在第 3 章用到,正文中會穿插複習。