Chinaunix
标题:
linux unicode utf8 gbk windows 乱码
[打印本页]
作者:
tur0000
时间:
2014-08-12 17:33
标题:
linux unicode utf8 gbk windows 乱码
QQ截图20140812172714.jpg
(85.66 KB, 下载次数: 23)
下载附件
2014-08-12 17:28 上传
情况是这样的
linux跑着后台程序
windows客户端执行某一个操作,服务端会返回一个值。
有个地方 can not transfer
注意看下面字段的 两段 ###### 之间的
我想知道 这是程序问题 还是linux系统某方面的问题, 报错提示为获取到计算转换长度。
程序转码字段:
int CGlobalSetting::gbk2utf8(char *utfStr, char *srcStr,int maxUtfStrlen)
{
printf("CGlobalSetting::gbk2utf8(char *utfStr, char *srcStr,int maxUtfStrlen)\n");
if(NULL==srcStr)
{
printf("Bad Parameter\n");
return -1;
}
//首先先将gbk编码转换为unicode编码
if(NULL==setlocale(LC_ALL,"zh_CN.gbk"))//设置转换为unicode前的码,当前为gbk编码
{
printf("Bad Parameter\n");
return -1;
}
int unicodeLen=mbstowcs(NULL,srcStr,0);//计算转换后的长度
if(unicodeLen<=0)
{
printf("Can not Transfer 1:%d!!!\n", unicodeLen);
return -1;
}
wchar_t *unicodeStr=(wchar_t *)calloc(sizeof(wchar_t),unicodeLen+1);
int nRet = mbstowcs(unicodeStr,srcStr,strlen(srcStr));//将gbk转换为unicode
if (nRet == -1)
{
printf(" mbstowcs(unicodeStr,srcStr,strlen(srcStr));//将gbk转换为unicode fail\n");
}
//将unicode编码转换为utf8编码
if(NULL==setlocale(LC_ALL,"zh_CN.utf8"))//设置unicode转换后的码,当前为utf8
{
printf("Bad Parameter\n");
return -1;
}
int utfLen=wcstombs(NULL,unicodeStr,0);//计算转换后的长度
if(utfLen<=0)
{
printf("Can not Transfer 2:%d!!!\n", utfLen);
return -1;
}
else if(utfLen>=maxUtfStrlen)//判断空间是否足够
{
printf("Dst Str memory not enough\n");
return -1;
}
nRet = wcstombs(utfStr,unicodeStr,utfLen);
utfStr[utfLen]=0;//添加结束符
free(unicodeStr);
if (nRet == -1)
{
printf(" wcstombs(utfStr,unicodeStr,utfLen); \n");
}
return utfLen;
}
int CGlobalSetting::utf82gbk(char *utfStr, char *srcStr,int maxUtfStrlen)
{
printf("int CGlobalSetting::utf82gbk(char *utfStr, char *srcStr,int maxUtfStrlen)\n");
if(NULL==srcStr)
{
printf("Bad Parameter\n");
return -1;
}
//首先先将gbk编码转换为unicode编码
if(NULL==setlocale(LC_ALL,"zh_CN.utf8"))//设置转换为unicode前的码,当前为gbk编码
{
printf("Bad Parameter\n");
return -1;
}
###################################################################################
int unicodeLen=mbstowcs(NULL,srcStr,0);//计算转换后的长度
if(unicodeLen<=0)
{
printf("Can not Transfer 1:%d!!!\n", unicodeLen);
return -1;
}
[fly]无法获取计算转换后的长度 上面图片的报错[/fly] 这个地方我特地用####加重 方便观看。
##########################################################################################
wchar_t *unicodeStr=(wchar_t *)calloc(sizeof(wchar_t),unicodeLen+1);
int nRet = mbstowcs(unicodeStr,srcStr,strlen(srcStr));//将gbk转换为unicode
if (nRet == -1)
{
printf(" int nRet = mbstowcs(unicodeStr,srcStr,strlen(srcStr));//将gbk转换为unicode \n");
}
//将unicode编码转换为utf8编码
if(NULL==setlocale(LC_ALL,"zh_CN.gbk"))//设置unicode转换后的码,当前为utf8
{
printf("Bad Parameter\n");
return -1;
}
int utfLen=wcstombs(NULL,unicodeStr,0);//计算转换后的长度
if(utfLen<=0)
{
printf("Can not Transfer 2:%d!!!\n", utfLen);
return -1;
}
else if(utfLen>=maxUtfStrlen)//判断空间是否足够
{
printf("Dst Str memory not enough\n");
return -1;
}
nRet = wcstombs(utfStr,unicodeStr,utfLen);
utfStr[utfLen]=0;//添加结束符
free(unicodeStr);
if (nRet == -1)
{
printf("wcstombs(utfStr,unicodeStr,utfLen); \n");
}
return utfLen;
}
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2