您当前的位置: 首页 >  c++

插件开发

暂无认证

  • 0浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Win32-C++-字符串编码转换-iconv.h-libconv库

插件开发 发布时间:2022-06-10 10:46:16 ,浏览量:0

文章目录
    • 1.libconv库
    • 2.作者答疑

1.libconv库

  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)             
关注
打赏
1665481431
查看更多评论
0.0499s