输入法纯净版:Unix下UTF-8和GB2312互相转换的函数[转]
来源:百度文库 编辑:中财网 时间:2024/05/04 05:53:00
Unix下UTF-8和GB2312互相转换的函数[转] 来源:ChinaUnix博客 日期:2009.02.05 15:46 (共有0条评论) 我要评论
在windows下进行utf-8和gb2312相互转化的代码网上流传了很广了,因为实现里面使用了两个windows函数(WideCharToMultiByte 和MultiByteToWideChar),在Unix下编程就没有办法使用了,上网google研究了下,发现在Unix下就是对
iconv
库功能的调用,非常简便。
详细的信息,可以man 3 iconv查看,这里列出我写的一个演示程序。
#includeiostream>
#includeiconv.h>
using namespace std;
int utf8togb2312(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen)
{
iconv_t cd;
if( (cd = iconv_open("gb2312","utf-8")) ==0 )
return -1;
memset(destbuf,0,destlen);
const char **source = &sourcebuf;
char **dest = &destbuf;
if(-1 == iconv(cd,source,&sourcelen,dest,&destlen))
return -1;
iconv_close(cd);
return 0;
}
int gb2312toutf8(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen)
{
iconv_t cd;
if( (cd = iconv_open("utf-8","gb2312")) ==0 )
return -1;
memset(destbuf,0,destlen);
const char **source = &sourcebuf;
char **dest = &destbuf;
if(-1 == iconv(cd,source,&sourcelen,dest,&destlen))
return -1;
iconv_close(cd);
return 0;
}
int main()
{
FILE *fp = fopen("love.txt","r");
if(fp == NULL)
{
cout "open file faiulre" endl;
return 1;
}
char line[80];
memset(line,0,80);
if( NULL == fgets(line,80,fp))
{
cout "read file failure" endl;
return 2;
}
char dest_gb2312[80];
utf8togb2312(line,strlen(line),dest_gb2312,80);
cout "before convert(utf-8): " line endl;
cout "after convert(gb2312): " dest_gb2312 endl;
cout endl endl;
char dest_utf8[80];
gb2312toutf8(dest_gb2312,strlen(dest_gb2312),dest_utf8,80);
cout "before convert(gb2312)" dest_gb2312 endl;
cout "after convert(utf-8)" dest_utf8 endl;
return 0;
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17660/showart_1814344.html
在windows下进行utf-8和gb2312相互转化的代码网上流传了很广了,因为实现里面使用了两个windows函数(WideCharToMultiByte 和MultiByteToWideChar),在Unix下编程就没有办法使用了,上网google研究了下,发现在Unix下就是对
iconv
库功能的调用,非常简便。
详细的信息,可以man 3 iconv查看,这里列出我写的一个演示程序。
#includeiostream>
#includeiconv.h>
using namespace std;
int utf8togb2312(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen)
{
iconv_t cd;
if( (cd = iconv_open("gb2312","utf-8")) ==0 )
return -1;
memset(destbuf,0,destlen);
const char **source = &sourcebuf;
char **dest = &destbuf;
if(-1 == iconv(cd,source,&sourcelen,dest,&destlen))
return -1;
iconv_close(cd);
return 0;
}
int gb2312toutf8(const char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen)
{
iconv_t cd;
if( (cd = iconv_open("utf-8","gb2312")) ==0 )
return -1;
memset(destbuf,0,destlen);
const char **source = &sourcebuf;
char **dest = &destbuf;
if(-1 == iconv(cd,source,&sourcelen,dest,&destlen))
return -1;
iconv_close(cd);
return 0;
}
int main()
{
FILE *fp = fopen("love.txt","r");
if(fp == NULL)
{
cout "open file faiulre" endl;
return 1;
}
char line[80];
memset(line,0,80);
if( NULL == fgets(line,80,fp))
{
cout "read file failure" endl;
return 2;
}
char dest_gb2312[80];
utf8togb2312(line,strlen(line),dest_gb2312,80);
cout "before convert(utf-8): " line endl;
cout "after convert(gb2312): " dest_gb2312 endl;
cout endl endl;
char dest_utf8[80];
gb2312toutf8(dest_gb2312,strlen(dest_gb2312),dest_utf8,80);
cout "before convert(gb2312)" dest_gb2312 endl;
cout "after convert(utf-8)" dest_utf8 endl;
return 0;
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17660/showart_1814344.html
utf-8和gb2312有什么不一样,什么时候用utf-8,又什么时候用gb2312???急
Gb2312编码转换到Utf-8编码
如何把 gb2312 转为 utf-8
菜习中的编码类型GB2312和UTF-8有什么区别 他们是什么意思
如何让服务器同时支持utf-8 与 gb2312
utf-8,gb2312以及UBB有关系么
有把GB2312转为UTF-8的Html语言吗?
请问如何解决网页支持utf-8与gb2312?
vbscript中怎样把gb2312转换为UTF-8编码?
请解释一下unicode,utf-8,gb2312这些编码吧!
html语言中<META>标签charset=gb2312和charset=utf-8有什么区别?
各位帮帮忙:在编写ASP时,为什么有些代码在GB2312下能运行,在UTF-8下却不能正常运行
如何用VB编写UTF-7与GB2312互转的程序
以前打开IE--查看--编码只有简体中文(GB2312)现在怎么又多了Unicode(utf-8)?
谁有将GB2312编码转换成UTF-8编码的PHP类
如何在PHP中进行GB2312与UTF-8的互换
如何在javascript中进行GB2312与UTF-8的互换
vbscript中gb2312转换为UTF-8编码的函数是什么?
600分:ASP页面中,怎么用VB代码把gb2312转化为UTF-8?
如何在gb2312页面中通过response.redirect向utf-8传中文参数?
如何把一个css文件的编码从“gb2312”改为“utf-8”?
在gb2312中显示utf asp
400分(不信来看):ASP页面中,怎么用VB代码把gb2312转化为UTF-8?
什么是Unicode big endian和UTF-8?