最近用到一点转码的东西,在网上搜到一个libiconv,使用了一下感觉还可以,不过还是有一两处容易犯错的地方,调试了半天才搞明白,此处是一个将UTF-8转换为GBK的小例子:
std::string convFromUTF8(std::string s) { iconv_t cd=iconv_open("GBK","UTF-8"); if (cd==(iconv_t)-1) { return ""; } size_t inlen=s.size(); const char* inbuf=s.c_str(); size_t outlen=inlen*2; std::string result(outlen,0); char* outbuf=(char*)result.c_str(); int n=iconv(cd,&inbuf,&inlen,&outbuf,&outlen); iconv_close(cd); if (n==-1) { return ""; } return result; }
其中为转换后的字符串设置的buffer长度为转换前字符串长度的2倍,不知道是否合理,不过应该是够用了。