在软件开发中不可避免的需要用到字符集的转换;转换方法很多如自行编写字符集转换库、利用Windows提供之MultiByteToWideChar函数等;自行编写相对周期较长,而利用MultiByteToWideChar等函数进行转换在跨平台移值时带来很大的不方便;所以在本文里我们将讲述如何利用在Linux与Windows下都可用的libiconv库进行字符集的转换。
我们可以从http://www.gnu.org/software/libiconv/上下载最新版本的libiconv;本文里以libiconv-1.9.2-1.exe为例子说明安装与使用方法;libiconv的安装非常的方便,就和大多数的Windows应用程序安装一样直接Step by Step就可以了;在安装过程中会提示你是否下载源代码,源代码说白了对我们也没有多大的用处所以就不选择下载源代码;安装完之后在libiconv的安装目录下的man/pdf目录中有一个libiconv-man.pdf,这个文件就是libiconv相关函数的说明;所以如果你对libiconv还不是很熟悉的话请看一下这个文件。
为了在VC6中使用libiconv库我们必需对VC6进行相应的设置;从VC6的菜单栏中选择ToolsàOptions..,在弹出的对话框中选择Directories选项卡,在Show directories for下拉框中选择Include files,在最下方的Directories:中添加上libiconv安装目录下的include目录,如下图(图1-1)所示:


                                     图1-1
这样我们就配置了iconv.h文件查找目录;由于libiconv要用到libiconv.lib所以接下来我们应该配置一下libiconv.lib文件的查找目录;在图1-1的Show directories for下接框中选择Library files,在最下方的Directories:列表中添加上libiconv安装目录下的lib目录;OK配置完成点击OK按钮就可以了;为了测试方便我们应该所libiconv安装目录下之bin目录下的libiconv2.dll复制到系统的System32目录下。
转换例子如下:
#include <stdio.h>
#include <string.h>
//包函libiconv库头文件
#include <iconv.h>
//导入libiconv库
#pragma comment(lib,"libiconv.lib")
 
int ChangeCode( const char* pFromCode,
                              const char* pToCode,
                              const char* pInBuf,
                              size_t* iInLen,
                              char* pOutBuf,
                              size_t* iOutLen );
 
int main( int argc, char* argv[] )
{
       char sInBuf[100];
       char sOutBuf[100];
       size_t iInLen = 0;
       size_t iOutLen = 100;
       int iRet;
       strcpy( sInBuf, "测试Test Source" );
       memset( sOutBuf, 0x00, 100 );
       iInLen = strlen( sInBuf );
       iRet = ChangeCode( "GBK", "UTF-16", sInBuf, &iInLen, sOutBuf, &iOutLen );
       return 0;
}
 
int ChangeCode( const char* pFromCode,
                              const char* pToCode,
                              const char* pInBuf,
                              size_t* iInLen,
                              char* pOutBuf,
                              size_t* iOutLen )
{
       int iRet;
       //打开字符集转换
       iconv_t hIconv = iconv_open( pToCode, pFromCode );
       if ( -1 == (int)hIconv )
       {
              return -1;//打开失败,可能不支持的字符集
       }
       //开始转换
       iRet = iconv( hIconv, (const char**)(&pInBuf), iInLen, (char**)(&pOutBuf), iOutLen );
       //关闭字符集转换
       iconv_close( hIconv );
       return iRet;
}
字符集的转换就是这么的简单;当然如果你有兴趣的话在Linux下也去安装一下libiconv然后把上面那段代码放到Linux下用gcc编译一下看看。

libiconv字符集转换库使用方法相关推荐

  1. libiconv字符集转换库在C#中的使用

    <libiconv字符集转换库使用方法>一文中说到了libiconv可以实现不同字符集的转换.比如GBK转BIG5等.在项目中因为需要,找到这个库.可是这个库在C#中没有很好的支持.不过, ...

  2. 不同字符集倒库的方法

    第一步:EXP 原 US7ASCII数据库中的SCOTT用户. 第二步:EXP 原US7ASCII 数据库中的ZHAOBOYI用户. 第三步:CREATE NEW DATABASE(CHARACTER ...

  3. 【MySQL】故障分析 | MySQL 优化案例 - 字符集转换

    1.概述 好文章转载:故障分析 | MySQL 优化案例 - 字符集转换 一.背景 开发联系我,说是开发库上有一张视图查询速度很慢,9000 条数据要查 10s,要求我这边协助排查优化. 二.问题 S ...

  4. mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换

    一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...

  5. 汉字编码转换原理及方法

    一.基本概念 · GB码 全称是GB2312-80<信息交换用汉字编码字符集 基本集>,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯 ...

  6. 使用iconv编程进行字符集转换

    使用iconv编程进行字符集转换 摘自:https://www.cnblogs.com/lancidie/archive/2013/04/12/3016965.html Linux上进行编码转换时,既 ...

  7. linux libcurl 库使用方法

    一.ibcurl简介 作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, I ...

  8. 小结两种在Python中导入C语言扩展库的方法

    小结两种在Python中导入C语言扩展库的方法 分类: Pythoner2009-08-18 20:44 2563人阅读 评论(1) 收藏 举报 python扩展c语言importstring 一种是 ...

  9. python字符集_Python任意字符集转换

    在python处理文本的过程中,经常会有文本字符集转换的情况, 而我们希望用一个方法,不用关心文本原本的字符集是什么样的,直接转换成想要的任何字符集就可以了. 方法一: import chardet ...

最新文章

  1. vue中 静态文件引用注意事项
  2. sap linux下配置文件,Linux下配置sapjco3
  3. 贴牌是赢在当下,创牌才会更有未来
  4. leetcode练习——栈(1)
  5. Serverless 服务选型
  6. 514 - Rails
  7. Apache服务器的下载与安装
  8. 学习笔记之dns正反向解析区域,主从服务,子域授权,安全
  9. ios ffmpeg h264 decode
  10. 如何格式化搭载 Apple 芯片的 Mac?
  11. ssm教师教学评价系统(ssm教学评价系统教师ssm学生评教系统)JSP网上评教系统jsp评教系统
  12. 【武忠祥高等数学基础课笔记】第一章 函数、极限、连续
  13. idea打包jar运行时出现——jar中没有主清单属性(Invalid or corrupt jarfile)
  14. 微信小程序实现押金管理(支付押金、申请退还押金、押金明细)
  15. 分享一款好用的ssh工具
  16. 2021.1.22平安科技面经--算法工程师实习生
  17. IoC容器Autofac
  18. QT FTP上传文件
  19. win7声卡驱动不能安装(安装失败)完美解决方案
  20. Win10预览版常用快捷键

热门文章

  1. Android_L(64bit) 模拟器配置及创建项目
  2. Zabbix监控和分布式部署实施方案
  3. 城市风云儿的装备体系
  4. .NET处理异常--zt
  5. mysql处理varchar类型的between和and的时间问题少一天解决;
  6. 解决vscode打开空白的问题
  7. Handshake failed due to invalid Upgrade header: null 解决方案
  8. Python入门到精通三天速成第一讲——创建自定义类
  9. 【采访】腾讯社交广告高校算法大赛 决赛第一周周冠军——ThreeIdiots比赛经验及心得分享 腾讯广告算法大赛
  10. SOTA太难了?试试Dropout