判斷字元是否是GB2312 80的漢字。

2021-09-05 23:12:42 字數 2314 閱讀 5450

首先,先介紹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...