對漢字字元的統計
以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無符號型來做統計。
(現就這樣吧,等我回去補一下位運算再回來更。。)
相關文章
- 字元編碼及空白漢字佔位符字元
- PAT-B 1042 字元統計 【對映】字元
- ORACLE中查詢出姓名列中 含有非漢字的字元Oracle字元
- PHP字串學習之如何返回漢字或混合字元的長度PHP字串字元
- 字串-字元統計2字串字元
- 字串-字元統計1字串字元
- 漢字轉漢語拼音
- JavaScript 擷取指定長度字串 區分漢字和英文字元JavaScript字串字元
- 統計字串字元個數字串字元
- 用python3統計一行字元中的英文字母,空格,數字和其他字元的個數Python字元
- JavaScript統計字元出現的次數JavaScript字元
- 040統計數字字元的個數字元
- GB2312漢字編碼字符集對照表
- C語言程式設計-漢字點陣C語言程式設計
- C#漢字轉漢語拼音C#
- 利用HashMap統計字元個數HashMap字元
- utf-8的中文漢字
- Jquery Validate自定義驗證規則,一個漢字等於兩個字元長度jQuery字元
- Excel表格如何按漢字的筆畫排序?Excel表格按漢字的筆畫排序的方法Excel排序
- java 漢字轉配音Java
- 只提取漢字部分
- C:漢字儲存
- 獲取字串中的所有漢字字串
- Python 漢字轉拼音的庫--- PyPinyinPython
- php 和 j s 對數字,字母,漢子等特殊字串 取反PHP字串
- python字元對映表和字元替換Python字元
- JS演算法——統計字元數量JS演算法字元
- golang count 單字元 字串 統計函式Golang字元字串函式
- PTA 實驗3-4 統計字元字元
- 如何用Python統計不同字元個數?Python字元
- mysql 中如何取得漢字欄位的各漢字首字母MySql
- 阿拉伯-漢字-數字轉換
- PHP 將數字轉換為漢字PHP
- cmd顯示漢字需要的設定
- 漢字描紅在Flutter側的落地Flutter
- 3045. 統計前字尾下標對 II(困難)
- 漢字編碼問題
- JS 漢字轉換拼音JS
- Win10系統打不出中文漢字如何解決Win10