交互设计在未来很有前途,不要再说是做界面的了。
分类: C/C++
2006-04-17 08:15:23
网络上关于unicode或宽字节编程的介绍很多,为什么要这样的的原因介绍的也很多,下面我们就从实用的角度出发,来看一下如果不采用unicode或者宽字节编程会给我们带来的一个问题.
我们通过一段代码来演示不采用unicode和采用了之后所产生的不同结果.
先看没有采用unicode的:
#include
#include
#include
void main()
{
char hz[32];
char str[2][32] = {"钦佩","恼怒"};
strcpy(hz,"张");
for(int k=0;k
{
printf("%02x",hz[k]);
}
printf("\n");
for(int i=0;i<2;i++)
{
if (strstr(str[i],hz) != NULL)
{
printf("str ======%s\n",str[i]);
for(int j=0;j
printf("%02x",str[i][j]);
printf("\n");
}
}
}
输出结果为:
ffffffd5ffffffc5
str ======钦佩
ffffffc7ffffffd5ffffffc5ffffffe5
str ======恼怒
ffffffc4ffffffd5ffffffc5ffffffad
不难看出,由于单字节的字符串处理函数是按一个字节一个字节处理的,在”钦佩”和”恼怒”两个字符串中都含有ffffffd5ffffffc5("张"),所以输出结果为这两个字符串中都含有"张"这个字符串.
再来看看采用了宽字节的:
#include
#include
#include
#include
void main()
{
wchar_t hz[32];
wchar_t str[2][32] = {L"钦佩",L"恼怒"};
wcscpy(hz,L"张");
for(int k=0;k
{
wprintf(L"%02x",hz[k]);
}
wprintf(L"\n");
for(int i=0;i<2;i++)
{
if (wcsstr(str[i],hz) != NULL)
{
for(int j=0;j
wprintf(L"%02x",str[i][j]);
wprintf(L"\n");
}
}
}
输出结果:
这样,对字符串的处理就不再出现误判的情形.
在实际编程中,需要处理汉字的部分多集中在界面处理部分,当然在后台程序中也可能会涉及.