Hi, 如果有任何想法与我沟通, 请用: lifr_nj 在 msn.com

QALoad: 在中文环境录制utf8编码的xml request

上一篇 / 下一篇  2007-08-23 22:32:12 / 个人分类:QALoad

但是如果locale设置为China,那么QALoad录制的脚本将是是GB2312编码的。也就是说,QALoad在拼接字符串的时候,如果字符串里面有中文,那么它是GB2312编码的。比如
    CLoadString buf;
    const char* str = "abc汉字def";
    buf += str;

在这里str是GB2312编码,长度是3+2+2+3 = 10;

如果在脚本里拼接了一个xml request的字符串,且里面有中文,那么问题就出现了。字符串是用gb2312编码的,但实际上一般来说,xml request/response都是utf8编码的。这个时候就需要做从gb2312到utf8的编码转换

关于ANSI编码(GB2312是ANSI编码的一种)和Unicode编码问题的一篇很好的文章:http://www.regexlab.com/zh/encoding.htm

这个编码转换需要一个叫conv的lib,在这里下载 http://gnuwin32.sourceforge.net/, 下载安装到目录假设为$install
  1. 把$install/bin/libiconv2.dll拷贝到C:\WINNT\system32,
  2. 把$install/include目录加入到 c++ compiler include. 访问途径Menu: Option->C++ Compiler Option
  3. 把$install/lib/libconv.lib加入到c++ compiler library. 访问途径Menu: Option->C++ Compiler Option

转换实例代码如下
 char * xmlStr = "....";//xmlStr contains the xml to be sent, GB2312 encoded.
 unsigned int ilen = strlen(xmlStr); //input buffer length
 unsigned int ōlen = ilen *  2; //output buffer length

 char * utf8XmlStr = (char *)malloc( olen); //acquire output buffer
 memset(utf8XmlStr, 0, olen);

 //duplicate an output buffer pointer, 
 //because pointer value will be chaneged in function "iconv"
 char* utf8XmlPtr = utf8XmlStr;
 iconv_t cd = iconv_open("utf-8", "gb2312"); //gb2312 -> utf-8
 iconv(cd, &xmlStr, &ilen, &utf8XmlPtr, &olen);
 iconv_close(cd);
free(utf8XmlStr);
utf8XmlStr=NULL;

   


相关阅读:

TAG: qaload 编码转换 QALoad

 

评分:0

我来说两句

Open Toolbar