文章目录
1.libconv库
- 1.libconv库
- 2.作者答疑
C++字符串编码必须处理字符串流,并处理相应的编码。否则容易产生乱码。字符串编码有几种办法, 一种是开源的libconv库(C语言库),一种是boost库(C++语言库),最后一种是windows平台库。 本文介绍第一种,libconv库的用法,拿来主义的读者可以直接拷贝,源代码如下:
//编码转换
static int EncodingConvert(const char *fromcode, const char *tocode,
char *inbuf, size_t& inlength, char *outbuf, size_t& outlength)
{
char **inbuffer = &inbuf;
char **outbuffer = &outbuf;
iconv_t cd;
size_t ret;
cd = iconv_open(tocode, fromcode);
if((size_t)cd == -1)
return -1;
#ifdef WIN32
ret = iconv(cd, inbuffer, &inlength, outbuffer, &outlength);
#else
ret = iconv(cd, (const char **)inbuffer, &inlength, outbuffer, &outlength);
#endif
if(ret == -1)
return -1;
iconv_close(cd);
return 0;
}
//转为gbk编码
static char* Utf2Gbk(char* data,unsigned int data_len)
{
//拷贝unicode数据
size_t str_len=data_len;
char* strSrcBuf=new char[str_len];
memset(strSrcBuf,0,str_len);
memcpy(strSrcBuf,data,data_len);
//utf8长度
size_t wlen=sizeof(wchar_t);
char* strDstBuf=new char[str_len*wlen];
memset(strDstBuf,0,str_len*wlen);
size_t wstr_len=str_len*wlen;
//转换编码
#ifdef WIN32
EncodingConvert("UTF-16LE","gbk",strSrcBuf,str_len,strDstBuf,wstr_len);//windows
#else
EncodingConvert("UTF-32LE","gbk",strSrcBuf,str_len,strDstBuf,wstr_len);//linux
#endif
delete[] strSrcBuf;
return strDstBuf;
}
//获取UTF字符个数
static int GetStrLenUtf8(const char* str)
{
if (!str) return 0;
int len = (int)strlen(str);
int ret = 0;
for (const char* sptr = str; (sptr - str)
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?