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
- 把$install/bin/libiconv2.dll拷贝到C:\WINNT\system32,
- 把$install/include目录加入到 c++ compiler include. 访问途径Menu: Option->C++ Compiler Option
- 把$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