`
guoyiqi
  • 浏览: 964936 次
社区版块
存档分类
最新评论

编码转换轻松实现

 
阅读更多

编码转换轻松实现
作者:zhaojianjun
出处:http://www.opendesktop.net/modules/b...ex.php?B_ID=78
在LINUX上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码。
一、利用iconv函数族进行编码转换
iconv函数族的头文件是iconv.h,使用前需包含之。
#include <iconv.h>
iconv函数族有三个函数,原型如下:
(1) iconv_t iconv_open(const char *tocode, const char *fromcode);
此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。
(2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);
此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。 (3) int iconv_close(iconv_t cd);
此函数用于关闭转换句柄,释放资源。
例子1: 用C语言实现的转换示例程序

/* f.c : 代码转换示例C程序 */
#include <iconv.h>
#define OUTLEN 255
main()
{
char *in_utf8 = "姝e?ㄥ??瑁?";
char *in_gb2312 = "正在安装";
char out[OUTLEN];

//unicode码转为gb2312码
rc = u2g(in_utf8,strlen(in_utf8),out,OUTLEN);
printf("unicode-->gb2312 out=%sn",out);
//gb2312码转为unicode码
rc = g2u(in_gb2312,strlen(in_gb2312),out,OUTLEN);
printf("gb2312-->unicode out=%sn",out);
}
//代码转换:从一种编码转为另一种编码
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = &outbuf;

cd = iconv_open(to_charset,from_charset);
if (cd==0) return -1;
memset(outbuf,0,outlen);
if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
//UNICODE码转为GB2312码
int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312码转为UNICODE码
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}

例子2: 用C++语言实现的转换示例程序

/* f.cpp : 代码转换示例C++程序 */
#include <iconv.h>
#include <iostream>

#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;
}


二、利用iconv命令进行编码转换

iconv命令用于转换指定文件的编码,默认输出到标准输出设备,亦可指定输出文件。

用法: iconv [选项...] [文件...]

有如下选项可用:

输入/输出格式规范:
-f, --from-code=名称 原始文本编码
-t, --to-code=名称 输出编码

信息:
-l, --list 列举所有已知的字符集

输出控制:
-c 从输出中忽略无效的字符
-o, --output=FILE 输出文件
-s, --silent 关闭警告
--verbose 打印进度信息

-?, --help 给出该系统求助列表
--usage 给出简要的用法信息
-V, --version 打印程序版本号

例子:
iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt
这个命令读取aaa.txt文件,从utf-8编码转换为gb2312编码,其输出定向到bbb.txt文件。

小结: LINUX为我们提供了强大的编码转换工具,给我们带来了方便。

分享到:
评论

相关推荐

    txt实用软件 一款绿色小巧的使用软件,可以轻松实现TXT文档的文件切分, 文本替换, 文件合并, 段落合并,编码转换,格式转换等等

    一款绿色小巧的使用软件,可以轻松实现TXT文档的文件切分, 文本替换, 文件合并, 段落合并,编码转换,格式转换等等

    utf8文件编码转换器

    轻松转换文件的编码方式,在网站开发的过程中可以快速的实现文件编码方式的转变

    python轻松实现代码编码格式转换

    由于某些原因,需要将代码从A机房迁移到B机房,这两个之间不能互相访问,但是历史原因导致A机房的代码全是utf8编码的,B机房要求是GBK编码,看看这个怎么解决。虽然很简单,但是还是要推荐给大家,需要的小伙伴参考...

    UTF-8编码和GBK编码互转,一个头文件搞定!跨平台不使用第三方库

    UTF-8编码和GBK编码互转,一个头文件搞定!跨平台不使用第三方库。只需要添加一些C语言标准的头文件...与平台无关,只要将.h文件加入你的工程代码中,即可轻松实现俩种编码格式的转换。配合在线编码转换工具网站验证。

    说塔网站文件编码转换器

    整站编码转换, 网站因为换服务器, 网站乱码, 或者想把自己的网站换成utf-8或其它编码, 它都可以轻松帮你实现。 文件类型可以自定义:.html,.css,.js,.asp,.php,.jsp,......

    在FPGA 中实现图像格式转换

    为支持加速实现FPGA 图像格式转换, Altera 开发了本白皮书介绍的1080p 视频设计工作台, 帮助系统设计人员轻松开发定制图像格式转换信号链。本文所讨论的图像格式转换参考设计可以作为起点, 适当修改后用于定制...

    ANSI UNICODE UTF8转换

    自己写的ANSI UNICDE 和UTF 8编码的转换。轻松实现三种编码的转换。

    一款界面直观、功能全面、使用轻松的视频格式转换软件.exe

    FonePaw Video Converter ...等技术,可以在支持CUDA的图形卡上对视频进行解码和编码,从而实现快速,高质量的高清和标清视频转换。这款一体化视频转换器能够有效地转换视频,音频和DVD文件,甚至可以更好地编辑它们。

    iPhone格式转换器6.2好易iPhone视频转换软件)

    好易-iPhone格式转换器界面友好,易操作,功能强,可以高速地将各种主流视频格式,如RM、RMVB、VOB、DAT、VCD、SVCD、WMV、ASF、FLV、...好易-iPhone格式转换器预设了iPhone常用输出格式,简单点选就可以轻松实现转换。

    常用进制转换工具v1.0免费绿色版

    常用进制转换工具是款非常实用的常用进制转换工具,能够轻松的实现十六进制、十进制、八进制和二进制数之间的相互转换,让你转换常数更加轻松便捷。

    新星AVI/MPEG视频格式转换器 v5.1.5.0.zip

    反之如果需要将MPEG、MPEG-2、MPG、MPEG-4、VCD、SVCD、DVD视频转换为各种编码的AVI视频,同样可以使用本软件实现。视频转换后可以保持原视频一样的清晰画质。本软件预置了最佳的参数设置,用户无需了解复杂的转换...

    闪电VCD格式转换器 v9.2.5.zip

    闪电VCD格式转换器是一款功能强大的VCD格式转换工具,本软件可以轻松将各种流行的视频格式转换为VCD、SVCD、DVD视频格式。例如:您可以将流行的RM, RMVB, FLV, MP4, 3GP, MPG, MKV, WMV, AVI, SWF, DVD, MOV, XviD, ...

    新星MP4视频格式转换器 v9.2.6.0.zip

    本软件优势在于转换编码先进,支持多线程,转换速度快,转换后的画质优,不失真,可以批量转换。 新星MP4视频格式转换器特色功能: 1、支持将HD高清摄像机录的的高清视频转换为非编软件Premiere、Vegas、会声会影...

    蒲公英VOB格式转换器 v5.6.6.0.zip

    软件采用了最新编码和解码技术,所以转换速度提高300%。转换后的画面完美、清晰,支持批量转换、转换完成后自动关机等功能,支持更换软件皮肤。支持Win7、Win8系统。 蒲公英VOB格式转换器软件特色功能: 1、支持将...

    Java Base64编码方法详解及实例分析

    在本文中,我们介绍了Base64.encodeBase64String方法的用途和功能,它是Java语言中用于Base64编码...Base64.encodeBase64String方法是Java中进行Base64编码的一种便捷实现,能够轻松地将二进制数据转换成Base64字符串。

    aimer-mac-video-converter-ultimate_full747.dmg 11.6.5.2 将视频转换为任何格式

    使用此快速视频转换器,您可以轻松地将视频和音频文件转换为高质量的任何格式,从而使您可以在各种设备和Web平台上播放视频。随时随地享受视频/音频文件。加快90倍的无损转换借助高速转换技术,Aimersoft Video ...

    Savedev代码转换器「Savedev Code Converter」-crx插件

    Savedev代码转换器是一个简单的Chrome扩展,实现转换的几个功能。 在Chrome浏览器中轻松安装并使用。 目前实施的转换是: - 文本字符串为二进制 - 二进制文本字符串 - 二进制数字 - 数字到二进制 - 十六进制到...

    新星MPG视频格式转换器 v9.0.8.0.zip

    当然本软件也可以将任意流行的视频格式转换为MPG格式视频,我们常用的AVI转换为MPG,MP4转MPG,DVD转MPG,MKV转MPG,MP3转MPG都可以轻松实现。操作极为简单,只需轻轻点击一下鼠标,软件就会为您完成复杂的转换工作...

    魔影工厂转换器 v2.1.1.4225 官方版.rar

    魔影工厂能够轻松实现将任意格式转换至F4V格式,更加方便您向各大视频网站进行视频上传。 由于F4V采用H264高清编码,因此具有更好的观赏效果。 魔影工厂不仅是一款支持F4V格式的多功能视频转换器,同时还拥有...

Global site tag (gtag.js) - Google Analytics