本文共 1967 字,大约阅读时间需要 6 分钟。
在软件开发中不可避免的需要用到字符集的转换;转换方法很多如自行编写字符集转换库、利用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编译一下看看。
转载地址:https://oscar.blog.csdn.net/article/details/6283197 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!