编码转换轻松实现
作者: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为我们提供了强大的编码转换工具,给我们带来了方便。
分享到:
相关推荐
本软件“万能的文件编码转换工具”专为此问题提供解决方案,它支持多种编码格式,使得用户能够轻松应对各种编码不兼容的情况。 首先,我们需要理解什么是文件编码。文件编码是指将字符转化为二进制数据的规则,常见...
C#作为一款强大的编程语言,提供了丰富的库和API,使得开发者能够轻松实现各种编码间的转换。本项目"**C#实现的编码转换软件**"便是一个实例,它具备了对单个文件以及整个目录进行递归转换的能力,并且支持自定义...
编码转换器是一款非常实用的工具,它主要用于处理各种字符编码之间的转换问题。在信息技术领域,字符编码是至关重要的,因为它决定了计算机如何存储和显示文本。不同的编码标准有不同的用途和覆盖范围,例如ASCII、...
《全面解析“wintool编码转换工具”》 在信息技术领域,编码转换是日常工作中不可或缺的一部分,尤其...而wintool编码转换工具.exe文件正是实现这些功能的核心程序,下载并运行后,即可体验到这款强大工具带来的便利。
易语言模块新编码转换大全提供了一系列的函数和方法,使得开发者能够轻松完成各种编码间的转换操作。 这个压缩包中的"模块新编码转换大全"可能包含以下几个方面的内容: 1. **编码识别**:模块可能包含识别文本...
在IT领域,编码转换工具是不可或缺的实用程序,主要用于处理不同字符编码间的转换问题。这里的“编码转换工具”指的是...通过使用像“编码转换工具”这样的软件,我们可以更轻松地处理这些挑战,实现数据的无障碍交流。
"字符编码转换器"是一款实用工具,能够帮助用户在这些编码格式之间轻松转换,解决因编码不匹配导致的乱码问题。 ASCII编码是最基础的字符编码,只包含了128个最基本的英文字符。然而,当涉及到其他语言,如中文、...
根据提供的文件信息,本文将详细解释Java中字符串的不同编码转换方法及原理,并深入探讨每种编码格式的特点。 ### Java字符串的编码转换 在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理...
本篇文章将基于提供的标题“C#写的编码转换工具(源代码)”和描述,深入探讨编码转换的相关知识点,并且着重介绍如何使用C#来实现这一功能。 首先,我们需要理解编码的概念。字符编码是计算机表示和处理文本的方式...
- 字符编码转换的实现,可能涉及到C++的`std::codecvt`类,或者Python的`codecs`库等。 - 错误处理和异常管理,确保在遇到编码问题时程序能够稳定运行。 - 用户界面设计,如何提供友好的交互方式,让用户轻松选择...
在IT领域,编码转换是一个非常重要的主题,尤其是在处理多语言数据和跨平台通信时。"编码转换器"是一个工具,它的主要功能是将一种字符编码格式转换为另一种,以确保数据在不同系统间能准确无误地传递和显示。下面...
通过分析源码,你可以了解到如何在易语言中使用内置函数或者自定义函数来实现编码转换功能。 1. 读取文件:使用易语言的“文件打开”和“文件读取”函数,读取待转换的脚本文件。 2. 识别编码:可以使用一些已有的...
在"易语言源码易语言JS实现编码转换源码.rar"这个压缩包中,我们找到了一个关于易语言与JavaScript(JS)之间进行编码转换的源码实现。这种编码转换在处理不同字符集和编码格式的数据时非常关键,尤其是在处理多国...
通过选择合适的编码类型,用户可以轻松地将文件从一种编码转换为另一种,这对于处理多语言或跨平台的项目尤其有用。 编码转换器的另一个重要用途是数据传输。网络通信中,由于不同的服务器和客户端可能使用不同的...
这个工具可以批量处理文件,无论是从UTF-8转换为GBK,还是从GBK转换为UTF-8,都能轻松实现。批量转换功能对于处理大量文本文件,如网页、数据库或软件本地化工作尤其有用,可以大大提高工作效率。 在压缩包文件列表...
描述中提到的“编码转换.rar”是一个便捷的工具,可实现UTF-8转GB2312以及其他常见编码格式的转换。这个工具的优点在于它不需要安装,属于绿色软件,意味着它不会在你的系统中留下任何冗余文件,同时保证了安全性,...
"编码转换支持库200版静态版iconvfne"和"文字编码转换支持库2050版静态版cncnvfne"可能是两个不同的版本或实现,它们可能提供了不同的性能优化、错误处理机制或者特定的编码集支持。静态版本意味着这些库在编译时...
易语言新BASE64编码转换模块是针对易语言编程环境设计的一种编码处理工具,它主要功能是实现数据的BASE64编码与解码。BASE64是一种常见的数据编码方式,常用于在网络上传输二进制数据,因为ASCII字符集中的所有字符...
在实现编码转换器时,自绘模块可以帮助开发者创建用户友好的界面,让用户可以轻松选择输入和输出编码,并显示转换过程和结果。 在易语言中,编码转换通常涉及到读取、解析、转换和写入文件的过程。开发者需要了解...
在易语言中,实现编码转换通常涉及以下几个关键步骤: 1. **识别原始编码**:首先,需要确定待转换数据的原始编码格式。这通常需要根据数据来源或用户输入来判断,因为不同的系统和软件可能采用不同的编码标准。 2...