程式如何區分該顯示中文字元或英語字元?

2021-08-10 14:03:28 字數 983 閱讀 7084

先看::

vc裡字元編碼是用mbcs(multi-byte chactacter system),char型別實際上就是乙個8bit的空間(與int型別相同,故有時候型別通用),中文字元「個」在vc裡占用2個char的空間,即2位元組,s1指向的記憶體上的資料為(10111000,11110110),如果用十進位制表示即為(184,246),十六進製制即為(0xb8,0xf6)。

對於mbcs,乙個字元占用的空間不是固定長度,如果是ascii碼則是8bit,gbk漢字則是16bit。

ascii碼的範圍用十進位制表示是 [0,127],單位元組字元,用來表示英文本元及數字和其他一些符號。

gbk漢字是雙位元組字元,前8bit範圍是[129,254],後8bit範圍是 [64,254]。

可以看到中西字元編碼是互不交叉的,printf的東西全送進螢幕緩衝區裡,程式讀取螢幕緩衝區上的「個」的前8bit,也就是184(0xb8),發現其不在單字符碼表裡(ascii),就知道這個不是個單位元組字元, 所以指標下移,向後再讀8bit,讀到 246(0xf6),此時兩個位元組一共16bit,拿去和gbk漢字碼表對照,查有此字,就顯示出來。

判斷是漢字還是字母的方法,當然就是根據該位元組對應數值所處範圍來判斷是單位元組字元(字母/數字/其他半形/通訊符號),還是雙位元組字元(如中日韓文字)。

#include

intmain

()讓我們來看一下結果:

所以我們還可以這樣玩:

#include

#include

//vc退散

intmain

(),i

;for(i

=0;i

<19;

i++)return0;

}mbcs根據碼表來看可以說是中英文無歧義的,因此可以區分該顯示中文還是英文。

cocos 中文字元顯示問題

在學習使用cocos中,經常會出現中文字元無法顯示問題,在windows上,最簡單的就是把帶有中文字元的頁面儲存為utf 8 編譯一下就可以看到中文字元的亂碼消失了。cocos在安卓平台下需要把unicode 轉換成utf 8編碼,一下提供乙個轉換函式 class tools else if w 0...

OpenInventor中文字元的顯示和解決方法

很多人問我如何顯示漢字,總是乙個乙個地說,很麻煩,特此寫在這裡 原因 openinventor支援freetype字型,但漢字採用unicode編碼,故而無法直接正確顯示 解決 使用freetype字型,或者,將unicode編碼轉換為freetype可以識別的字型 使用內建的freetype引擎 ...

qt 5 9 0 中文字元顯示

qt中的中文顯示,經常會出現亂碼。qt4中的解決方法,大致如下所示 qtextcodec setcodecfortr qtextcodec codecforname utf8 qtextcodec setcodecforlocale qtextcodec codecforname utf8 qtex...