老生常谈的一个问题,汉字编码与解码问题,各种编码就不再复制粘贴了,需要的话维基百科捡起来再看看。
名称 | 第一字节 | 第二字节 |
---|---|---|
GB2312 | 0xB0-0xF7(176-247) | 0xA0-0xFE(160-254) |
GBK | 0x81-0xFE(129-254) | 0x40-0xFE(64-254) |
遇到一个问题,一字符串以‘|’ 分隔,解析后出现各种乱码。这显然是编码重叠导致的。 举例来看: “王文弢|赵珅|刘颖弢|田東|孙炜韡” 查看这些汉字的编码,可以看到高位中正好有|这个相同编码。
那么就需要对汉字进行必要解码而不是默认。
unsigned char ch1 = (unsigned char) *s;
unsigned char ch2 = (unsigned char) *(s+1);
if (ch1>=129 && ch1<=254 && ch2>=64 && ch2<=254)
{
...
}
查看其代码原来使用库函数strchr,于是重新写写这个函数:
char *StrChr (char *s,char c)
{
while(*s!='\0'&&*s!=c)
{
unsigned char ch1 = (unsigned char) *s;
unsigned char ch2 = (unsigned char) *(s+1);
if (ch1>=129 && ch1<=254 && ch2>=64 && ch2<=254)
{
++s;
}
++s;
}
return *s==c ? s: NULL;
}
好了。以后再继续。