早期 , 許多繁中網站的內容仍是以 Big5 來撰寫 , 那麼對應的程式系統也還沒有那麼99%導向unicode , 所以 …. ^_^” … 我自己的網站也是用 Big5 (CP950) 來撰寫的. 反正沒有套用啥系統. 但是 , Blog 就是另外一回事了… wordpress 早期沒那麼複雜, 看來 Code Page 的設定還可以很 clear , 但現在 …. 若不用 Unicode , 將會有衝突了 !
我也忘記是甚麼時候將 wordpress 從10年前的版本 upgrade 到 4.x (現在有跟上時代 Ver.5.x) , 一直都沒去在意 code page 的事, 但近期我突然想到要做個筆記 , 要寫在 blog 上, 卻遇到了困難 . 新的 block editor 看來是只能接受 UTF-8 , 無法接受其他的編碼 ! 那… 我應該要做的, 就是把 MySQL 裡的資料撈出來 , 利用 iconv 將 Big5 轉成 UTF-8 再吐回去 … 這期間我遇到了問題 :
1. MySQL 系統的連線字元校正 , 設定為 UTF-8 , 但 WordPress 的預設校正是預設值 = latin1 . mysqldump 所拉出來的內容, 估計是 UTF-8 編碼 , 但內容卻是 Big5 .
2. load 出來的資料 , 進行 iconv -c -f Big5 -t utf-8 db.big5 > db.utf-8 , 卻總是出現 iconv: iconv(): Illegal byte sequence 這樣的問題 , 然後就卡住了.
解決方法 ..
1. mysqldump 加入 –default-character-set=name 這樣的參數 , 這樣連線的校正碼就不會亂掉了 . 我 tcsh 的語系設定為 Big5 , 這樣產生的 dump file 是可以直接用 joe or vi 之類的 editor 來看到中文字的 :
mysqldump –default-character-set=latin1 -u wp -p wp-worren > db_big5.sql
2. iconv 在 FreeBSD 下總是出現 Illegal byte sequence 的錯誤信息 , 山不轉路轉, 將產出的 db_big5.sql 傳到 Windows 下來用 iconv 轉 (Windows 安裝gnu32 的 iconv , 這個 google 就一堆資訊) .
iconv -c -f Big5 -t UTF-8 db_big5.sql > db_utf-8.sql
3. mysql -u wp -p wp-worren < db_utf-8.sql 還是出現錯誤信息, 說是哪個地方有錯誤的指令. …. in case , 這個檔案至始至終都沒有設定為 UTF-8 , 仍是 ANSI 格式 . 所以我就再加了參數 :
mysql -u wp –default-character-set=latin1 -p wp-worren < db_utf-8.sql
沒錯 , 跟 mysqldump 一樣 , 這樣就能順利了.
然後就是在 WordPress 系統中 setings -> reading 的 encoding (codepage)從 Big5 改成 UTF-8 , 大功告成. 很妙的是 , 若把這兒修改成 UTF-8 之後, 這個設定欄位就不再出現了, 除非進到 MySQL 裡改 . 很顯然, 現在 WordPress 就是整個已 UTF-8 為主了 !