怎麼還是 Big5?我要 UTF-8!
寫 blog 已有一段日子,最近才開始認真學習有關 blog 的各種工具。以 no-joe blog 及網絡暴民為起點,知道其它 blogger 在用 BlogMarks、del.icio.us、Technorati、Bloglines、365Key 等工具,自己卻還停留在把 blog 當成網上貼文區的階段,真是慚愧。
在研究這些工具的過程中,發現自己的 blog 採用 Big5 是個大問題。當年「少不更事」,不知道 UTF-8 的好處及 Big5 的壞處,未料到卻是一失足成千古恨。現在 trackback 到別人的 blog 時,或者用 BlogMarks 等工具時,始發現如果用 Big5 的話是會出現亂碼。這迫使我認真考慮轉用 UTF-8 的問題。
在 WordPress 上雖然可以輕易設定使用 UTF-8,問題卻在已經進入數據庫的資料仍是 Big5。尋訪多個網站(例子 [1][2])之後,定出了以下的方略:
一、先對 MySQL 資料庫做一次 MySQL dump,把內容匯出為 sql 檔。
二、對這個 sql 檔進行由 Big5 到 UTF-8 的轉碼。本來使用 iconv 工具:
iconv -f Big5 -t UTF-8 -o outputfile inputfile
但中途遇到某些字元時出了問題。後來從網上找來一個以 Java 寫成的 Chinese Encoding Converter,總算避開了這個問題。語法為:
java -cp zhcode.jar zhcode -b8 inputfile outputfile
三、在做足安全措施後,把轉碼後的檔案匯入回到資料庫。
本以為完成這些步驟後,WordPress 即可轉碼,實則不然。在我的電腦上,WordPress 本與 一個網上相簿 (使用 Coppermine) 及 一個 Wiki 共用某資料庫。在瀏覽器上檢查過,兩者都已成功轉為 UTF-8,唯獨是 WordPress 部份卻沒有轉碼,仍是 Big5,原因未明。查看轉碼後的 sql 檔,証實所有在 WordPress 裡的文章都已成功轉為 UTF-8,且用 INSERT INTO wp_posts 加回到資料庫。另外試在 WordPress 內改變一些設定,再重新匯入轉碼後的 sql 檔,証實 WordPress 回復到先前的設定,即幾個 table 確實成功被重新匯入。問題沒有得到解決。如果有哪位高手知道原因,還請留言賜教。
* * *
[2007 年 7 月 16 日註]因見很多人經搜尋器來到這裡,想必是遇到類似的問題,來此尋求解決之法吧。讓我補充一點資料,希望有用:
我最終還是解決了轉碼的問題,但是用了一個蠢方法。如下面留言所述,出問題的不是轉碼程式,而是有些代碼比較奇怪,破壞了 SQL 的句子結構,令文章不能滙入。解決方法是在原 SQL 滙出檔中,檢查可能出問題的文字(通常不會太多),然後去掉之。當然要先備份文章,到其它文章滙入成功之後,才再人手補上有問題的文章。當時做這個便花了幾小時,各位高手如有更好的方法,請在下面留言。








http://alf-li.pcdiscuss.com/c_convertz.html
SQL 也只是一些字串,你可以試試用這個軟件
可惜我不懂如何將 mysql 的 big5 文字轉成 utf-8 文字, 但我想問, wordpress 中, 不是預設成使用 utf-8 嗎? 為何閣下的 blog 會用 big5 呢? 題外話, 我十分欣賞你那份自我求知的精神, 加油, 相信一定會有一些熟電腦的朋友幫到你的!
多謝兩位。在經過連番摸索之後,情況開始明朗。經過幾次「匯出、轉碼、匯入」的循環,發現凡是經過由 Big5 轉到 UTF-8 的,在匯入後都會發生問題:
一、用 zhcode 轉碼,匯入時會跳過 WordPress 的幾個 table,所以匯入後還是 Big5,但 Coppermine 和 Wiki 卻有更新。
二、用 utf-converter 轉碼,結果 wp_posts 整個 table 匯入失敗,其它 WordPress 的 table 則成功,結果是整個 blog 成功變成 UTF-8,卻一篇文章也沒有。
三、結合之前用 iconv 轉碼失敗的經驗,推斷是在 sql 檔中有一些字元令轉碼時出錯。於是我在已轉碼的 sql 檔裡試去掉 wp_posts 中的記錄,只留下最前兩筆。匯入後如我所料,所有的東西都轉成了 UTF-8,而文章則只有兩篇。這表示轉碼方面的步驟沒有做錯,出問題是由於在被去掉了的記錄中,有不合法的字元,破壞了 INSERT INTO wp_posts 那句 SQL statement 的語法(例如多加了一個開引號之類),令得整句 SQL statement 不能執行,所以出現未能更新部份 table 的情況。
四、至於 Reny 介紹的轉碼軟件,因是 Windows 版本,我已 VNC 回到公司的電腦試用,但結果還是一樣,沒有幫助。
結論:問題出在轉碼上,解決方法是找出哪些字元出了問題,再用若干方法迴避。只是因資料量很大,暫時沒有好的方案。
本周末花了好些時間研究這個問題,雖然未能成功,幸好學會了很多有關 SQL 及在 Linux 上轉碼的方法,算是花得有些價值。現在還是稍緩一緩,再搜集多點資料再說,下次有時間再試,也請各位高手不吝賜教。
試試看 …
iconv -c -f big5 -t utf8 -o outfile inputfile
share this website to u, which is about Doraemon
http://william.memory-off.org/travel/2004_2005/doraemon/index.html