編碼方式下中英文本元分離問題

2021-04-18 06:56:20 字數 1451 閱讀 5950

題目:

定義 cstring  str ="沃爾瑪123我的356開始";非unioncode

怎麼樣把字串的中文和數字區分;

返回結果 rstr1 = 「沃爾瑪我的開始」 rstr2 = 「123356」。

我按照單字元擷取時總是出現亂碼?請求大俠們指導!

#include    

#include

using namespace std;

int main(int argc, char* argv)

沃爾瑪我的開始

gb2312gb2312-80是乙個簡體中文

字符集的中國國家標準,全稱為《資訊交換用漢字編碼字符集--基本集》,由中國國家標準總局發布,2023年

5月1日實施。gb2312編碼通行於大陸;新加坡等地也採用此編碼。幾乎所有的中文系統和國際化的軟體都支援gb2312。

gb2312標準共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個;同時,gb2312收錄了包括拉丁字母、希臘字母、日文

平假名及片假名字母、俄羅斯語

西里爾字母在內的682個全形字符。

gb2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋99.75%的使用頻率。

對於人名、古漢語等方面出現的罕用字,gb2312不能處理,這導致了後來gbk及gb18030漢字字符集的出現。

gb2312中對所收漢字進行了「分割槽」處理,每區含有94個漢字/符號。這種表示方式也稱為區位碼。

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)。

分析:因為高位位元組和低位位元組都加上了0xa0,所以這2個位元組都會>10100000(0xa0),必然也會大於等於10000000(128),也就大於127,其實更嚴格的說是大於0xa0,但是由於所有的ascii字元都是小於等於127的(最大的ascii碼為127的是del),所以這裡用》127來判斷也是正確的。

所以下面的**應該更嚴格一些:

#include    

#include

using namespace std;

int main(int argc, char* argv)

string中英文本元

在c 中字串類的string的模板原型是basic string template class elem,class traits char traits elem class ax allocator elem class basic string 第乙個引數 elem表示型別。第二個引數trai...

中英文本元混合處理方法

1,txt檔案匯入sql時 303410001401?600 lang 4 t粵ig?0220?011840628900000?bpo 303410001501?600 landau中er?0220?011840628900000?bpo 303410001601?600 lang 6 t漢ig?0...

中英文本串中統計英文本元個數

工作中遇到如下問題,搜尋網路資源得以解決,記錄以供參考。問題 在一段中英文混合的字串中,通過關關鍵字查詢到某位置p。需要擷取p前後一定長度字元,構成乙個新的字串。問題解析 由於是中貢混合的字串,當向前後擷取長度不當時會出現擷取到中文半個字的情況。面引起出現亂碼的情況。方法 首先確定字串的編碼格式,由...