2016年11月13日 星期日

關於 dB2K 中文方面的問題

關於 dB2K 中文方面的問題: (最後更新日期: 2002/12/11 下午 12:18:35 )
Q1). 解決 dB2K RAD 中文問題:
A1.1). 在 db2k.ini 中加入:
           [CommandSettings]
           ldriver=DB950TW0

A1.2).
修改 BDE 中的設定:
           BDE -> Databases -> ????? (
依照所使用的選項而定) -> LANGDRIVER -> 設定為 dbase CHT cp950.
           BDE -> Configurage -> Driver
與 Native 中也要跟這修改語系為 dBase CHT cp950.
Q2). 修改 db2k RAD 中顯示字形大小、名稱問題:
        在 db2k.ini 中修改(沒有就新增)下列 Session:
        [DefaultFonts]
        Application=
新細明體,10
        Controls=
新細明體,10
Q3). 在 db2k 中如何使用 MySQL ??
A3). 先用 ODBC32 建立一個 MySQL DSN:A).控制台 -> ODBC32 -> 使用者資料來源名稱 -> 新增 -> 自己設定一個 DSN -> 例如取名為 ss-MySQL,  B).控制台 -> BDE -> Databases -> New 新增一個資料庫連結 -> ODBC DSN 處填入 ss-MySQL ( 就是 ODBC32 設定的 DNS).
        C).
在 db2k RAD 中的 database 元件上 -> databaseName -> 填入 ss-MySQL -> 這樣子就完成了連結!
Q4). MySQL 中文字處理問題:
A4). 如果你的 MySQL 是安裝在 Windows 平台的話,在 %Win% 目錄下的 My.ini 檔案中加入下列資料
        [mysqld]
        default-character-set = big5
        [client]
        default-character-set = big5
        如果你的 MySQL 安裝在 Linux 平台的話,請抓取 Source 重新編譯,
       
在編譯時,記得加入一行 --with-charset=big5 <---這行就是重點.
Q5). 關於中文字在 db2k 中的問題:
A5). dbase 2000
以後的版本採用 Unicode 編碼方式,所以,您在 db2k 中所使用的「字串」,都是 Unicode,當然,你也可以將非中文字串存入字串變數中,但是,重點在於,如何對這些字串做 DBCS/SBCS 轉換呢?所謂的 DBCS 就是 Double Byte Character Set -> 就是每個中文字或是英文字,都是用 2Bytes 來表示,
                     Unicode
就是 DBCS 格式,和我們以前所認識的中英文編碼方式不同,
                    
以前,我們所認識的中英文字編碼原則是,A -> Ascii code -> 65, 中 -> Ascii code ->164, 164, 兩 Byte
                    
但是,db2k 採用的是 Unicode/DBCS,所以,上述的資料就不在是單純的 65, 164, 164 ,而變成
                     A -> 65, 00    
中 -> 45, 78
                    
上述方法,你可以用下列方式來驗證:
                      
                     
cStr = "A中文"
                     ? cStr.getByte(0)  // 65
                     ? cStr.getByte(1)  //  0
                     ? cStr.getByte(2)  // 45
                     ? cStr.getByte(3)  // 78
                     ? Asc( "A" )         // 65
                     ? Asc( "
中" )        // 42148
                     
很奇怪吧?中文字的「中」為何他的 ASCII 會是: 42148 ?

                     我來說個轉換方法:
                    
原本 '中' 字的 SBCS ASCII Code 為: 164(HiByte)/164(LoByte),
                     164 * 254 + 164 ( HiByte * 256 + LoByte ) = 42148
                     ? Chr( 42148 )    // '
中'
而: SBCS 就是 Single Byte Character Set -> 
就是我們以前所認識的 'A中文' -> ASCII -> 65, 164, 164  在一些 WinAPI 中,有些 API Name 尾部有個 'A',
例如 'GetProFileStringA', 代表著他傳回的資料就是 SBCS 資料,如果我們要取用這些傳回的資料,你就必須將這個資料從 SBCS to DBCS 轉換,這樣子 db2k 才看得懂.

另外,Windows 9x 系統採用的 SBCS 編碼方式,Windows NT 以上的採用 DBCS 編碼方式,這點要特別注意.


沒有留言:

張貼留言