Unix下UTF-8和GB2312互相转换的函数
2008-12-24 14:26
375 查看
在windows下进行utf-8和gb2312相互转化的代码网上流传了很广了,因为实现里面使用了两个windows函数(WideCharToMultiByte 和 MultiByteToWideChar),在Unix下编程就没有办法使用了,上网google研究了下,发现在Unix下就是对iconv
库功能的调用,非常简便。
详细的信息,可以man 3 iconv
查看,这里列出我写的一个演示程序。
#include<iostream>
#include<iconv.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;
}
首先我建立了一个文本文件,保存有字符串"我爱北京天安门",然后存为utf-8格式,在FreeBSD下编译,运行程序,看起来是这个样子:
库功能的调用,非常简便。
详细的信息,可以man 3 iconv
查看,这里列出我写的一个演示程序。
#include<iostream>
#include<iconv.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;
}
首先我建立了一个文本文件,保存有字符串"我爱北京天安门",然后存为utf-8格式,在FreeBSD下编译,运行程序,看起来是这个样子:
相关文章推荐
- Unix下UTF-8和GB2312互相转换的函数
- Linux下UTF-8和GB2312互相转换的函数
- Linux下实现UTF-8和GB2312互相转换的方法
- vbs 转码 gb2312转换为UTF-8编码的函数
- C/C++ GB2312,UTF编码互相准确转换
- [原创]用javascript编写的GB2312编码转换成UTF-8的函数
- C/C++ GB2312,UTF编码互相准确转换
- PB9利用ADODB.Stream和ToUniCode()及ToAnsi()两个函数实现UTF-8及GB2312的转换
- gb2312与UTF-8之间的互相转换
- C++ 字符集转换 codecvt utf-8 gb2312 url
- 把UTF-8编码转换为GB2312编码[转]
- 如何将数据库中的GB2312编码转换成utf-8编码
- 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?
- php的函数iconv在转"utf-8"到"gb2312"时会自动截断
- 字符集编码之间的转换,UTF-8 转为 GB2312,GB2312 转为 UTF-8 ,Unicode 转换成UTF-8
- 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?
- PHP版本繁简体,UTF-8和Unicode互转的函数:GB2312Big5,GB2312UTF-8,Big5UTF-8等
- ASP写的汉字转换UTF-8及UTF-8转GB2312
- c++字符集之间转换(UTF-8,UNICODE,Gb2312)
- UTF-8、Unicode、Gb2312编码之间的转换类