xikjun 发表于 2015-1-2 22:00:14

http响应是gbk编码,用binarytostring后有乱码!

utf-8编码的http响应用binarytostring后显示正确,但gbk编码的http响应用binarytostring就有错码,几个参数都试过搞不懂,望高手指点

netegg 发表于 2015-1-2 22:28:55

不知道行不行//GBK编码转换到UTF8编码
int GBKToUTF8(unsigned char * lpGBKStr,unsigned char * lpUTF8Str,int nUTF8StrLen)
{
    wchar_t * lpUnicodeStr = NULL;
    int nRetLen = 0;

    if(!lpGBKStr)//如果GBK字符串为NULL则出错退出
      return 0;

    nRetLen = ::MultiByteToWideChar(CP_ACP,0,(char *)lpGBKStr,-1,NULL,NULL);//获取转换到Unicode编码后所需要的字符空间长度
    lpUnicodeStr = new WCHAR;//为Unicode字符串空间
    nRetLen = ::MultiByteToWideChar(CP_ACP,0,(char *)lpGBKStr,-1,lpUnicodeStr,nRetLen);//转换到Unicode编码
    if(!nRetLen)//转换失败则出错退出
      return 0;

    nRetLen = ::WideCharToMultiByte(CP_UTF8,0,lpUnicodeStr,-1,NULL,0,NULL,NULL);//获取转换到UTF8编码后所需要的字符空间长度
   
    if(!lpUTF8Str)//输出缓冲区为空则返回转换后需要的空间大小
    {
      if(lpUnicodeStr)
            delete []lpUnicodeStr;
      return nRetLen;
    }
   
    if(nUTF8StrLen < nRetLen)//如果输出缓冲区长度不够则退出
    {
      if(lpUnicodeStr)
            delete []lpUnicodeStr;
      return 0;
    }

    nRetLen = ::WideCharToMultiByte(CP_UTF8,0,lpUnicodeStr,-1,(char *)lpUTF8Str,nUTF8StrLen,NULL,NULL);//转换到UTF8编码
   
    if(lpUnicodeStr)
      delete []lpUnicodeStr;
   
    return nRetLen;
}

xikjun 发表于 2015-1-2 23:05:13

binarytostring 没有GBK这个选项。这应该是乱码的原因。满世界没找到办法?楼上提供的代码不知道在autoit中咋用?

netegg 发表于 2015-1-2 23:10:35

_winapi_MultiByteToWideChar
_winapi_WideCharToMultiByte说白了,就是这两个函数

gto250 发表于 2015-1-22 20:44:48

你给个gbk编码的网页
页: [1]
查看完整版本: http响应是gbk编码,用binarytostring后有乱码!