BIG5-難字
鍵入BIG-5造字,寫入BIG-5造字對應中文內碼到資料庫中。
上一篇,實驗Unicode的T-SQL輸入環境下將位在BIG-5難字中的"瀞"寫入Unicode編碼的欄位:
但其實說穿了,就是把Unicode的N'瀞'內碼寫到Unicode的編碼欄位上,並不是真的使用到BIG-5的造字區字碼,只要注意不要因為定序而被SQL或是Windows\.NET判斷成BIG5而轉換。
扣除主機系統的EBCDIC/EUC/JIS內碼,經常碰到的中文交換內碼是ANSI+BIG-5,恰好碰到的幾家銀行也會在BIG-5造字區建立自己的客戶會用到的中文字碼,接下來我們來實作把BIG-5的難字就寫進BIG-5編碼的資料庫欄位。
- 第一步: 利用Windows內建造字程式(eudcedit.exe)建立[瀞]
這邊我們用BIG-5E的字集碼中的[瀞]83F8,同時連結注音輸入法ㄐㄧㄥ;另外造字程式會同時新增BIG-5與UNICODE,UNICODE會按照BIG-5造字序下來,對應瀞是F088。
- 第二步: 輸入T-SQL指令,記得要選剛剛造出來的新字(瀞),這邊會有一字兩碼的狀況(因為Unicode本來就支援瀞,現在造字區也對應有了1個)。
INSERT INTO TESTWORD
VALUES ('瀞', N'瀞')
- 第三步: 查詢寫入結果(序號3是這一次寫入結果)
神奇的事情發生了!不論BIG-5難字,Unicode難字都寫入了!可以看出Unicode 701E的瀞和F088的瀞的差異。
1.C1欄位是BIG5,內碼83F8,正確!
(指令是Unicode T-SQL,但是Windows/.NET會自動轉F088,寫入時,欄位是BIG-5,SQL還會自動Mapping回來83F8,關鍵在於造字區序會自動對應,如果選本來Unicode的瀞,她就不能用順序的慣例轉回去了。)
2.C2欄位是Unicode,內碼F088,也正確寫入造字區的[瀞]了。
碰到幾家銀行在BIG-5造字作法大概有以下2種:
- BIG-5造,Unicode不造
- BIG-5造,Unicode造
呼~第1種作法要另外寫AP轉(抓頭)
補充: 從黑暗大的分享,聯想直接利用Hex 16進位寫入的方式:
INSERT INTO TESTWORD
VALUES (0x83F8, 0X88F0)
序號4是用Hex字串寫入的結果。