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;
}
[解决办法]
专家不亏是专家,学习了