大多數的 asp 應用程式若是在 utf-8 模式下開發, 前面多會有這麼一行:
<%@LANGUAGE=”VBSCRIPT” CODEPAGE=”65001″%>
然而有個很麻煩的事是在處理判定 BIG5 編碼的中文字. 在正常的狀況下, 應該不會用到這樣的功能, 因為無論是 BIG5 或非 BIG5 的中文字都是可以在 UTF-8 的環境下良好並存的, 但若是和一些舊的程式或其他異質環境介接, 就會遇到這種問題, 解決的方式是利用 asp 的 codepage 來轉換內碼後判定即可. 方式如下:
Function IsBig5(strChar) ' check A440~C67E 常用字, C940~F9D5 次常用字 session.codepage="950" Dim lngAsc lngAsc = Asc(strChar) IsBig5 = (lngAsc >= -23488 And lngAsc <= -14722) If Not IsBig5 Then IsBig5 = (lngAsc >= -14016 And lngAsc <= -1579) session.codepage="65001" End Function
利用了 session 的 codepage 動態轉換, 將一個字用 Asc 碼判定值是否落在 BIG5 碼內, 以進行判定, sample code 如下:
strTest = "政府环境保护限期" For i=1 to Len(strTest) charTemp = Mid(strTest,i,1) Response.Write charTemp & " IsBig5 = " & IsBig5(charTemp) & "<br>" Next
輸出結果將會是:
政 IsBig5 = True
府 IsBig5 = True
环 IsBig5 = False
境 IsBig5 = True
保 IsBig5 = True
护 IsBig5 = False
限 IsBig5 = True
期 IsBig5 = True
請特別注意執行的 codepage 為 65001, 也就是在 UTF-8 的環境下的 asp 程式, 附件為整個 asp 的程式碼, 供各位研究看看囉!
sample.zip
BIG5 內碼對照表可以參考: http://ftp.isu.edu.tw/pub/Windows/Chinese/code/big5.txt
stdfont.24? (hanstd.24) |
標準字型 | 常用字 次常用字 倚天字 |
A440-C67E C940-F9D5 F9D6-F9FE |
5401 7652 41 |
|
spcfont.24 (han-gr.24) |
特殊符號 | 標準字 控制字 可造字 |
A140-A3BF A3C0-A3E0 A3E1-A3FE |
408 33 30 |
<- 保留 <- 保留 |
spcfsupp.24 (han-gr1.24) |
特殊字型 | C6A1-C8FE | 365 *318 |
408 max. Han’s 24 |
|
ascfont.24 (han-asc.24) |
ASCII | 256 |