在自己的工程中使用iconv进行编码转换

在工程中需要进行多字节到wchar_t的转换,windows下MultiByteToWideChar和WideCharToMultiByte已经足够好用。但是在linux和mac下没有这些api,我们的替代方案:1、mbs2wcs  wcs2mbs,这两个c的库函数其实内部也就是对刚刚windows的api和接下来我们要说的iconv的封装。使用时要注意,如果涉及到中文,要先setlocale,当设置好正确的locale,函数内部才能找到正确的字符集进行转换。但是我很悲剧的,无论试过多少参数,都没有办法正确的转换。

于是就有了2号方案,直接使用iconv进行编码转换。

    这个库使用很简单,使用举例:

    

[cpp]  view plain copy
  1. char szFrom[] = “转换”;  
  2. wchar_t  wszTo[64] = {0};  
  3. const char* pszFrom = (const char*)szFrom;  
  4. char* pszTo = (char*)wszTo;      // 虽然我们的目标类型是wchar_t数组,这里依然当做char来处理  
  5. size_t from_len = strlen(szFrom); // 这里是字节数,如果是wchar_t的话,要乘上 sizeof(wchar_t)  
  6. size_t to_len = 63;  
  7. iconv_t cd = iconv_open(“WCHAR_T”, “GB2312”);   // 由gb2312转化为wchar_t  
  8. iconv(cd, (const char**)&pszFrom, &from_len, (char**)&pszTo, &to_len);  
  9. iconv_close(cd)  
 

    虽然使用很简单,但是在mac下,尝试了一天依然无法成功转换中文(gb18030------wchar_t),当时工程用的是mac操作系统提供的动态库版本iconv,一怒之下动了直接把iconv代码加入到工程中的念头。就算失败,我也好断点调试一下,哪里失败了,不至于像现在这样失败的不明不白。

    作为我们在程序中使用这三个函数其实只需要两个c文件,  libiconv-1.13.1/libcharset/lib/localcharset.c和 libiconv-1.13.1/lib/iconv.c

    把这两个文件加到工程中,依赖哪些头文件处理下,有哪些编不过的处理下(无非就是缺少些#define xxxx)。

    在mac xcode和vs2010下测试没问题。

 

 

    接下来考虑要做的:由于iconv并不保证转换必然成功,如果失败就直接返回了,所以可以考虑做个封装,以使其使用更方便。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值