首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++如何判断汉字是简体还是繁体呢

2013-11-30 
c++怎么判断汉字是简体还是繁体呢?想用C++实现汉字简繁体的转换,但是不知道其中的原理和怎么判断,简体和繁

c++怎么判断汉字是简体还是繁体呢?
想用C++实现汉字简繁体的转换,但是不知道其中的原理和怎么判断,简体和繁体在计算机中怎么存储的?怎么才能实现转换?
[解决办法]
判断编码范围。具体的,请google。
[解决办法]
编码不同吧,简体是UTF8,繁体好像是台湾的编码吧
[解决办法]
要看编码转换,,简体,用两个字节,,繁体就不知道了,,
看看,gb2312编码,,gb2312 编码只包含了6000多个汉字,,并不包含繁体,,

大陆是不用繁体,,台湾用繁体big5编码方式,,

如果gb2312可以转换成big5,,,如果不能,就直接查询编码转换表(一般都是采用二分查找)
gb2312在内存中存储,是用两个字节,,只存储,汉字的机内码,,高字节是区码,低字节是位码,
两字节码,拼起来就是汉字的机内码,,







[解决办法]

long GetBig5Count(char *str)//如果此函数返回值大于零,则表明传入的字符串极可能是繁体
{
int lnBIG5 = 0;//用於統計可能是繁體字的漢字個數
int lnGB = 0;//用於統計可能是簡體字的漢字個數
int liTranLen = strlen(str);

for(int liT = 0; liT<liTranLen-1; liT++)
{
//尾字節40-7E是BGI5碼特有的,如果掃描到這種編碼說明此字元串是繁體(經測試:有例外,可能是漢字的最後一個編碼與英文編碼組合而成的)
if((BYTE)(BYTE)str[liT]>=161 && (BYTE)(BYTE)str[liT]<=254 && (BYTE)(BYTE)str[liT+1]>=64 && (BYTE)(BYTE)str[liT+1]<=126)
lnBIG5 ++;

//首字節A4-A9在GB中為日文假名,希臘字母,俄文字母和制表符,正常文本中很少出現,而這個範圍是BIG5的常用漢字,所以認為這是BIG5碼
if((BYTE)(BYTE)str[liT]>=164 && (BYTE)(BYTE)str[liT]<=169 && (BYTE)(BYTE)str[liT+1]>=161 && (BYTE)(BYTE)str[liT+1]<=254)
lnBIG5 ++;

//GB中首字節AA-AF沒有定義,所以首字節位於AA-AF之間,尾字節位於A1-FE的編碼幾乎100%是BIG5(經測試:沒有100%),認為是BIG5碼
if((BYTE)(BYTE)str[liT]>=170 && (BYTE)(BYTE)str[liT]<=175 && (BYTE)(BYTE)str[liT+1]>=161 && (BYTE)(BYTE)str[liT+1]<=254)
lnBIG5 ++;

//首字節C6-D7,尾字節A1-FE在GB中屬於一級字庫,是常用漢字,而在BIG5中,C6-C7沒有明確定義,但通常用來放日文假名和序號,C8-D7屬於罕用漢字區,所以可認為是GB碼
if((BYTE)(BYTE)str[liT]>=196 && (BYTE)(BYTE)str[liT]<=215 && (BYTE)(BYTE)str[liT+1]>=161 && (BYTE)(BYTE)str[liT+1]<=254)
lnGB ++;
}

//如果掃描完整個字元串,可能是簡體字的數目比可能是繁體字的數目多就認為是簡體字不轉簡(不一定准确)
return lnBIG5-lnGB;
}

[解决办法]
专家不亏是专家,学习了

热点排行