首先,先介紹gb2312-80編碼。參看文章「gb2312編碼」。以下內容來自那篇文章。
gb2312或gb2312-80是乙個簡體中文字符集的中國國家標準,全稱為《資訊交換用漢字編碼字符集--基本集》,由中國國家標準總局發布,2023年5月1日實施。gb2312編碼通行於大陸;新加坡等地也採用此編碼。幾乎所有的中文系統和國際化的軟體都支援gb2312。
gb2312標準共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個;同時,gb2312收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄羅斯語西里爾字母在內的682個全形字符。
gb2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋99.75%的使用頻率。
對於人名、古漢語等方面出現的罕用字,gb2312不能處理,這導致了後來gbk及gb18030漢字字符集的出現。
分割槽表示
gb2312中對所收漢字進行了「分割槽」處理,每區含有94個漢字/符號。這種表示方式也稱為區位碼。
01-09區為特殊符號。
16-55區為一級漢字,按拼音排序。
56-87區為二級漢字,按部首/筆畫排序。
10-15區及88-94區則未有編碼。
舉例來說,「啊」字是gb2312之中的第乙個漢字,它的區位碼就是1601。
位元組結構
在使用gb2312的程式中,通常採用euc儲存方法,以便相容於ascii。
每個漢字及符號以兩個位元組來表示。第乙個位元組稱為「高位位元組」,第二個位元組稱為「低位位元組」。「高位位元組」使用了0xa1-0xf7(把01-87區的區號加上0xa0),「低位位元組」使用了0xa1-0xfe(把01-94加上0xa0)。例如「啊」字在大多數程式中,會以0xb0a1儲存。(與區位碼對比:0xb0=0xa0+16,0xa1=0xa0+1)。
在實際的運用中,有時會要求判斷乙個中文字元是否是gb2312中的中文字元。
在vb2005中,tb = system.text.encoding.getencoding("gb18030").getbytes(s),表示將字元s的內碼放到tb這個位元組陣列裡。其中gb18030是向下相容gb2312。
於是,編寫了乙個函式,用來判斷字元是否是gb2312的中文字元。用的是vb2005。**格式修正於2023年1月6日。
public
function isgb2312(
byval s
asstring)
asboolean
if s
isnothing
then
return
false
if s =
""then
return
false
if s.length > 1
then s = s.substring(0, 1)
dim tb()
asbyte
try tb = system.text.encoding.getencoding(
"gb18030").getbytes(s)
if tb.length = 2
then
if tb(0) >= 176
andalso tb(0) <= 247
andalso tb(1) >= 161
andalso tb(1) <= 254
then
if tb(0) = 215
andalso tb(1) > 249
then
return
false
else
return
true
endif
else
return
false
endif
else
return
false
endif
catch
return
false
endtry
endfunction
注:在vb2005中,asc函式也能返回字元的內碼,不過返回值是integer型的。而且由於和早期的vb版本相容,返回值還進行了一定的處理。早期的vb中integer用的是2個位元組,那麼,漢字的內碼也是兩個位元組,這兩個位元組組成乙個integer型的變數,由於第乙個位元組的最高位一定是1,所以,早期的vb的漢字的內碼是乙個小於0的整數。而vb2005的integer型的變數是4個位元組。漢字的內碼是兩個位元組,轉到integer型,填充到後面兩個位元組,前面兩個位元組用0填充,這樣一來,vb2005的漢字內碼應該是乙個正數,但為了和早期的相容,vb2005做了一定的處理,用了乙個公式256x+y-65536來計算漢字的內碼,其中x是內碼的第乙個位元組,y是內碼的第二個位元組。
判斷字元是否是GB2312 80的漢字。
首先,先介紹gb2312 80編碼。參看文章 gb2312編碼 以下內容來自那篇文章。gb2312或gb2312 80是乙個簡體中文字符集的中國國家標準,全稱為 資訊交換用漢字編碼字符集 基本集 由中國國家標準總局發布,1981年5月1日實施。gb2312編碼通行於大陸 新加坡等地也採用此編碼。幾乎...
判斷字串是否是中文
一,判斷字元是否是中文 1 通過編碼判斷單個字元是否是中文。如下 判斷乙個字元是中文還是英文 public static bool ischinese char c 1 將字串轉換成字元陣列,遍歷字元陣列判斷每個字元是否是中文。如下 判斷字串中是否包含中文 public static bool is...
C 判斷字元是否是全形半形
c 字串的全形是指用二個位元組來表示的乙個字元 c 字串的半形是用乙個位元組來表示的乙個字元 這樣的話我們就可以用string.length 和system.text.encoding.default.getbytecount來判斷 其中string.length表示c 字串字串的字元數,syste...