linux下iconv函数编码转换
在字符编码转化中,将UTF8转化为gb2312的形式,我使用的iconv函数,代码如下:
#include <iconv.h>
#include <iostream>
#include <string.h>
#define OUTLEN 255
using namespace std;
// 代码转换操作类
class CodeConverter {
private:
iconv_t cd;
public:
// 构造
CodeConverter(const char *from_charset,const char *to_charset) {
cd = iconv_open(to_charset,from_charset);
}
// 析构
~CodeConverter() {
iconv_close(cd);
}
// 转换输出
int convert(char *inbuf,int inlen,char *outbuf,int outlen) {
char **pin = &inbuf;
char **pout = &outbuf;
memset(outbuf,0,outlen);
return iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen);
}
};
int main(int argc, char **argv)
{
char *in_utf8 = "姝e?ㄥ??瑁?";
char *in_gb2312 = "正在安装";
char out[OUTLEN];
// utf-8-->gb2312
CodeConverter cc = CodeConverter("utf-8","gb2312");
cc.convert(in_utf8,strlen(in_utf8),out,OUTLEN);
cout << "utf-8-->gb2312 in=" << in_utf8 << ",out=" << out << endl;
// gb2312-->utf-8
CodeConverter cc2 = CodeConverter("gb2312","utf-8");
cc2.convert(in_gb2312,strlen(in_gb2312),out,OUTLEN);
cout << "gb2312-->utf-8 in=" << in_gb2312 << ",out=" << out << endl;
}
程序运行结果如下:
utf-8-->gb2312 in=姝e?ㄥ??瑁?,out=??e????????
gb2312-->utf-8 in=正在安装,out=姝e
不知道为什么下面的转化只有一部分,求高手帮忙,如在C++中有其它编码转化方法,请不吝赐教,谢谢!
#include <iconv.h>
#include <iostream>
#include <string.h>
#define OUTLEN 255
using namespace std;
// 代码转换操作类
class CodeConverter {
private:
iconv_t cd;
public:
// 构造
CodeConverter(const char *from_charset,const char *to_charset) {
cd = iconv_open(to_charset,from_charset);
}
// 析构
~CodeConverter() {
iconv_close(cd);
}
// 转换输出
int convert(char *inbuf,int inlen,char *outbuf,int outlen) {
char **pin = &inbuf;
char **pout = &outbuf;
memset(outbuf,0,outlen);
return iconv(cd,pin,(size_t *)&inlen,pout,(size_t *)&outlen);
}
};
int main(int argc, char **argv)
{
char *in_utf8 = "姝e?ㄥ??瑁?";
char *in_gb2312 = "正在安装";
char out[OUTLEN];
// utf-8-->gb2312
CodeConverter cc = CodeConverter("utf-8","gb2312");
cc.convert(in_utf8,strlen(in_utf8),out,OUTLEN);
cout << "utf-8-->gb2312 in=" << in_utf8 << ",out=" << out << endl;
// gb2312-->utf-8
CodeConverter cc2 = CodeConverter("gb2312","utf-8");
cc2.convert(in_gb2312,strlen(in_gb2312),out,OUTLEN);
cout << "gb2312-->utf-8 in=" << in_gb2312 << ",out=" << out << endl;
}
程序运行结果如下:
utf-8-->gb2312 in=姝e?ㄥ??瑁?,out=??e????????
gb2312-->utf-8 in=正在安装,out=姝e
不知道为什么下面的转化只有一部分,求高手帮忙,如在C++中有其它编码转化方法,请不吝赐教,谢谢!
...全文
相关推荐
iconv()函数的用法
iconv()函数的用法,字符编码间的转换
linux字符集编码指南
linux下的字符编码转换方法。教你如何实现Linux下的编码转换。
linux系统上支持php的 iconv()函数的方法
iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库。
linux字符编码转换
描述了linux各种字符编码的转换方法,包括详细的例子。
Linux下实现UTF-8和GB2312互相转换的方法
下面小编就为大家带来一篇Linux下实现UTF-8和GB2312互相转换的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦


