自己以SOHO從事程式編寫五年, 對程式編寫仲算有些經驗, 今天開始開多一個文章分類, 和大家分享程式編寫的事. 今天要寫的, 就是 UTF-8.
(這類文章對像是有程式編寫知識的人, 如果沒有這經驗, 就可能無法理解了)
編寫網誌管理系統系統的一個目的, 就是讓我去了解 UTF-8.
我之前有寫個網頁和網上的應用系統, 都是用BIG5, 但發現越來越多人使用UTF-8, 包括 SinaBlog, 所以有興趣去了解一番.
UTF-8 的一個好處, 就是可以在同一篇文章輸入繁體和 "简体", 不過, 原來對程式編寫來說, 內有很多東西要去處理.
例如我編寫的網誌管理系統, 所有系統的STRING, 我會先用繁體, 在pass給Browser前, 我要用UTF8Encode把所有字串轉為UTF-8.
當收到Browser的Request時, 我又要把input用UTF8Decode轉回繁體, 然後儲存在資料庫. 到要取回資料時, 我又要把資料轉回UTF-8. 就這樣, 問題出現了.
例如要把 "浅谈" 這兩個UTF-8的简体字轉為繁體, 用String儲存, 會出現 ?? 的. 就必須用WideString儲存起, 但要資料庫儲存WideString又會遇到問題, 這個真令我煩惱.
另一個處理的方法, 就是把Browser取得的UTF-8字串直接儲存在資料庫, 但在我編寫系統時, 我要先將系統內的字串, 例如 "網誌管理系統" Encode 為 UTF-8 先, 加埋資料庫的UTF-8資料, 傳給 Browser 嗎?
最慘的是, 外國沒有繁簡字的麻煩, 想問也不知到那裡問, 想學也不知在那裡學, 在Google尋找了很久, 也找不到想要的答案. 不知大家有沒有編寫這類系統的經驗, 可以分享一下嗎?
我覺得直接儲存UTF-8資料可能是最好的解決辦法.
回覆刪除Shirlun :
回覆刪除我覺得直接儲存UTF-8資料可能是最好的解決辦法.
這樣, 例如 utf8Value 是一個資料庫的資料 (e.g. 浅谈), 你要輸出
會員名稱: 浅谈
是否要寫成;
UTF8Encode("會員名稱: ")+utf8Value
呢? 咁多幾麻煩呀, 或或可以把成Source Code做了UTF8Encode, 再Compile, 這個可行嗎?
要看看compiler是否支持UTF8,最直接就是試一試.如果compiler可以,再找個支持UTF8的editor就更方便了.
回覆刪除Shirlun :
回覆刪除要看看compiler是否支持UTF8,最直接就是試一試.如果compiler可以,再找個支持UTF8的editor就更方便了.
我是Borland C++ 6.0, 不知是否支援UTF8, 要找找看.
以下是我寫 PHP 的經驗,因為大多要同時處理中文及日文,所以必定選用 utf8 編碼。 utf8 雖然方便,但所佔的系統資源比 big5 及 gb 更多,但以目前的電腦能力應不成問題。
回覆刪除C++ 應該用 string table 好過 hardcode string 係 source code 度喎
回覆刪除馮友 :
回覆刪除以下是我寫 PHP 的經驗,因為大多要同時處理中文及日文,所以必定選用 utf8 編碼。 utf8 雖然方便,但所佔的系統資源比 big5 及 gb 更多,但以目前的電腦能力應不成問題。
那你如何處理資料儲存在資料庫, 把utf-8直接儲存嗎?
另外, 你是用支援utf-8的editor嗎?
angus :
回覆刪除C++ 應該用 string table 好過 hardcode string 係 source code 度喎
給我的感覺是, 要用 string table 比較麻煩, 例如如果有GUI, 是否也用 string table呢?
不個用string table有個好處, 就要容易就multi-language的系統. Run-time 改語言.
有沒有多言關於使用 string table 的資料呢?
Enoch :
回覆刪除馮友 :
以下是我寫 PHP 的經驗,因為大多要同時處理中文及日文,所以必定選用 utf8 編碼。 utf8 雖然方便,但所佔的系統資源比 big5 及 gb 更多,但以目前的電腦能力應不成問題。
那你如何處理資料儲存在資料庫, 把utf-8直接儲存嗎?
另外, 你是用支援utf-8的editor嗎?
對,新版的 mysql 已支援 utf8 文字儲存。如果是舊的便要把欄位由 big5 改成 utf8 ,可是如此一來舊的資料也會讀取成亂碼。
存成 utf8 的字串也只可以經由 utf8 編碼的網頁顯示出來。
Enoch
回覆刪除我是Borland C++ 6.0, 不知是否支援UTF8, 要找找看.
C++ Builder 6? 試了 BDS 2006/Turbo C++ Explorer 嗎? 如要用 unicode 的話那什麼 BDE, dbExpress, BDP 想也不用想,VCL 也不能用 unicode (GUI 用 TNT 吧),只能用 M$ 的 ADO, ADO .NET.
這是看你對 coding time 和 maintenance time 的分配問題,如果做 group project 一定要用 string table
回覆刪除Enoch :
angus :
C++ 應該用 string table 好過 hardcode string 係 source code 度喎
給我的感覺是, 要用 string table 比較麻煩, 例如如果有GUI, 是否也用 string table呢?
不個用string table有個好處, 就要容易就multi-language的系統. Run-time 改語言.
有沒有多言關於使用 string table 的資料呢?
william :
回覆刪除C++ Builder 6? 試了 BDS 2006/Turbo C++ Explorer 嗎? 如要用 unicode 的話那什麼 BDE, dbExpress, BDP 想也不用想,VCL 也不能用 unicode (GUI 用 TNT 吧),只能用 M$ 的 ADO, ADO .NET.
未試, 你試過嗎? 可以支援 utf-8 editor?
angus :
回覆刪除這是看你對 coding time 和 maintenance time 的分配問題,如果做 group project 一定要用 string table
可否講下為何group projct要用string table呢? 因為現在只是一個人寫系統, 不用string table會寫得快D, maintenance也不會有甚麼問題.
亞宏 :
回覆刪除我想問online-game係咪都係一d人寫出嚟嘅程式呢?噤係咪都可以寫返一d程式去破解?please(請解答)
是, 但如其花時間破解, 不如花多些時間寫個 online-game 吧.