對漢字字元的統計
以GB2312為標準,說一下我對漢字字元統計的一點認識。
ASCII碼:一個字元佔一個位元組,以0開頭;
中文字元:一個漢字佔兩個位元組,以1開頭。
ASCII碼的161-255這中間94個字元很少用,所以用來作為中文字元的編碼。但是中文漢字很多,遠不止94個,所以我們用94*94=8836個足夠來表示日常生活中常用的漢字。
對於漢字的統計,我一開始採用了以下的方法,比較簡單易行,可以用來做要求不高漢字不難的簡單統計,但是容易出Bug。
因為漢字從0xA0開始編碼,其中0xA0即160,在其後包括有中文的標點符號,也算在漢字字符集中。所以我們可以直接考慮用
int ch,count=0;
分別代表漢字的位元組和對漢字的計數。
將讀取到的漢字位元組直接與0xA0作比較
if (ch>0xA0)
count++;
但是要注意,漢字字元佔倆位元組阿,所以最後要
count/=2;
你以為這就完事兒了?怎麼可能!
還有還有還有!!
我們木有考慮到一個問題:
如果所統計的目標檔案裡面有一些么蛾子,它們不算是中文字元,但又佔兩個位元組,而且兩個位元組中說不定滿足有大於0xA0的。那如果是這樣的話,我們的統計就又出錯了,這就是我上面說的容易出Bug的原因。
下面我再介紹一種嚴謹的統計方法。
本文一開始說了,一個漢字佔兩個位元組,都是以1開頭的。所以我們可以考慮分別判斷對於一個字元它的兩個位元組是否都是以1作為開頭的,如果是則為中文字元。
因為1作為開頭在最高位表示“負”,所以要用unsigned char無符號型來做統計。
(現就這樣吧,等我回去補一下位運算再回來更。。)
相關文章
- C# 校驗字串是否漢字、其他字元,數字或字元C#字串字元
- 字元編碼及空白漢字佔位符字元
- vi在修改漢字的時候,把漢字作為一個字元處理的設定辦法字元
- ORACLE中查詢出姓名列中 含有非漢字的字元Oracle字元
- PHP字串學習之如何返回漢字或混合字元的長度PHP字串字元
- 如何擷取指定長度字串區分漢字和字元字串字元
- JS判斷字串長度(英文佔1個字元,中文漢字佔2個字元)JS字串字元
- java將漢字改成對應首字母Java
- PAT-B 1042 字元統計 【對映】字元
- 驗證字串是否包含英文字元、數字或者漢字程式碼例項字串字元
- C#漢字轉漢語拼音C#
- 結對程式設計做漢堡程式設計
- PHP判斷字串-全英文字元-英漢混合-純漢字的簡單方法PHP字串字元
- JavaScript 擷取指定長度字串 區分漢字和英文字元JavaScript字串字元
- Unicdoe【真正的完整碼錶】對照表(二)漢字Unicode表Unicode
- 字元數統計字元
- C語言程式設計-漢字點陣C語言程式設計
- 結對程式設計之漢堡包程式設計
- 去除字串中的漢字function字串Function
- iOS漢字轉拼音的方法iOS
- [案例] 字元型欄位統計資訊只對前32位進行統計字元
- java 漢字轉配音Java
- C:漢字儲存
- 只提取漢字部分
- 資料庫mysql插入異常 漢字無法插入方法,設定 建表的字元資料庫MySql字元
- 字串-字元統計2字串字元
- 字串-字元統計1字串字元
- 29:統計字元數字元
- Excel表格如何按漢字的筆畫排序?Excel表格按漢字的筆畫排序的方法Excel排序
- 獲取字串中的所有漢字字串
- 取漢字全拼的SQL函式SQL函式
- php 和 j s 對數字,字母,漢子等特殊字串 取反PHP字串
- JS 漢字轉換拼音JS
- UNICODE碼轉漢字Unicode
- 漢字處理問題?
- 漢字轉拼音pl/sqlSQL
- 阿拉伯-漢字-數字轉換
- PHP 將數字轉換為漢字PHP