文章目录
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)
关注
打赏
热门博文
- Adobe illustrator插件开发-SPInterfaceSuite-插件A向插件B传递消息-插件通信-AI插件开发
- javascript-ztree-树形控件-初始化-加载节点数据-节点数据获取
- Adobe illustrator插件开发-坐标系统-AIHardSoftSuite-画板坐标-页面坐标-AI插件开发
- Adobe illustrator插件开发-AIUIDUtilsSuite-AIUIDPoolSuite-AIUIDSuite-AIUIDREFSuite-Art唯一标识符与索引-AI插件开发
- C++-逆向分析-类的成员函数地址与对象地址动态绑定-this指针-成员函数和成员虚函数反汇编解析
- C++-逆向分析-结构体和类-内存布局-this指针-静态数据成员-对象作为参数和返回值
- Adobe illustrator插件开发-命令名称-AddCommand -AI插件开发
- Adobe illustrator插件开发-事件-PlugPlugAddEventListener-向系统注册事件-AI插件开发
- Adobe illustrator插件开发-ole拖拽粘贴交换数据格式-RegisterClipboardFormat函数-AI插件开发
- Adobe illustrator插件开发-所有模块列表-内部存在大量非公开的Suite-AI插件开发