|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2004-08-02, 09:56 PM | #1 |
版區管理員
|
Delphi/C builder 語系修改(瞞天過海)
本文已徵得原作者黃權燊(中文黃大仙)同意轉載,由小弟代勞貼上
VCL字集編碼字串表 -------------------------------------------------------------------------------- Builder / Delphi 的程式都有以下的字集編碼字串表. ANSI_CHARSET=00 DEFAULT_CHARSET=01 SYMBOL_CHARSET=02 MAC_CHARSET=4D SHIFTJIS_CHARSET=80 GB2312_CHARSET=86 CHINESEBIG5_CHARSET=88 GREEK_CHARSET=A1 TURKISH_CHARSET=A2 HEBREW_CHARSET=B1 ARABIC_CHARSET=B2 BALTIC_CHARSET=BA RUSSIAN_CHARSET=CC THAI_CHARSET=DE EASTEUROPE_CHARSET=EE OEM_CHARSET=FF (一) 首先, 我們先看看字集編碼字串表放在那裡. 我們以 GB2312為例, 假設用 Ultra Edit 開啟一個程式Builder程式 graphics.exe, (如果各位有興趣做實驗, 可以在本站下載 Graphics v1.0 Free) 找尋字串GB2312, 如下圖 GB2312字串的 file位置是 211d8, 放到 RVA Converter 內去轉換 rva 是421bd8, 亦即是內碼為 d8 1b 42 00 ( rva 是十六進制長整數, 內碼記錄由後到前, 每兩位數為一組 ) 再用 Ultra Edit 去找尋, 得到的是 很明顯, 前面的86000000是指簡體中文, 而後面的88000000是指繁體中文. 這部份內碼不用我解釋, 大家都知道是字集編碼字串表. 修改字集編碼字串表就可以取代移花接木法. (二) 修改字集編碼字串表 現以 Delphi 程式 formread.exe 為例, 以下是已經由簡體譯成繁體的程式. 當然, 在實際工作時, 我們提議先修改字集編碼字串表, 然後做轉譯的工作. 使用 Ultra Edit 打開 formread.exe, 把內容拉到最尾. 然後由尾向頭找尋內碼 86000000 很快就會找到符合下面格式的內碼. 86 00 00 00 xx xx xx xx 88 00 00 00 xx xx xx xx 是GB2312字串的rva碼, 每個程式都不相同, 我們可以忽略. 到這裡, 只要把 86 改成 88 就大尼i成, 比較移花接木法, 修改位置較少, 但要小心比對內碼. 看看修改後的表現, 無得彈. -------------------------------------------------------------------------------- CX Studio wongtaisin.uhome.net hugewong@yahoo.com.hk all rights reserved 19/01/2003 ============================================== 小弟感想: 這個方法的妙處除了可以比較簡易的修改語系,使程式能正確的顯示中文外;也解決了當同時有二種語系設定的程式時的問題,因為我曾遇過同時設置了簡體中文語系(GB2312_CHARSET)與繁體中文語系(CHINESEBIG5_CHARSET)的程式,用移花接木法無法修改之,而這個方法正好解決了這個情形 作者:ru5j123 |
送花文章: 3146,
|