- 论坛徽章:
- 0
|
情况是这样的
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;
}
这个地方我特地用####加重 方便观看。
##########################################################################################
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;
}
|
|