iconv编码转换

环境:cocos2dx 3.10

1.vs环境下编译windows版本,需要增加头文件和链接库
①cocos2d-x-3.10\external\win32-specific\icon\include
②cocos2d-x-3.10\external\win32-specific\icon\prebuilt

2.编译android版本,需要修改Android.mk文件增加iconv支持
①LOCAL_WHOLE_STATIC_LIBRARIES += android_support
②$(call import-module, android/support)

3.转换函数

 1 #if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
 2 #include "iconv.h"
 3 #elif CC_TARGET_PLATFORM == CC_PLATFORM_IOS
 4 #include <iconv.h>
 5 #elif CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
 6 #include "iconv.h"
 7 #endif
 8 
 9 int iconv_convert(void *src, unsigned int src_len, const char *src_charset, void *dest, unsigned int dest_len, const char *dest_charset)
10 {
11     int ret = -1;
12     iconv_t oConv = iconv_open(dest_charset, src_charset);
13     if (oConv == (iconv_t)(-1))
14     {
15         cocos2d::log("ERROR: unable to open libiconv.");
16         return ret;
17     }
18 
19 #ifdef _WIN32
20     const char *in = (const char *)src;
21 #else
22     char *in = (char *)src;
23 #endif
24     char *out = (char *)dest;
25     size_t src_left = src_len, dest_left = dest_len;
26 
27     //dest_len目标长度不够的话,会进入这里
28     //in_left表示还有多少长度输入没有转换,out_left表示还有长度输出剩余
29     if (iconv(oConv, &in, &src_left, &out, &dest_left) != (size_t)(-1)){
30         //返回转换了多少空间,用来计算剩余多少空间(可以用于确定写入\0的位置;但是如果src中已经包含了\0则无需再写入)
31         ret = dest_len - dest_left;
32     }
33 
34     iconv_close(oConv);
35 
36     return ret;
37 }
38 
39 /*
40 //使用例子
41 char inStr[] = "China中国 Test";
42 char outStr[1024] = {};
43 if (iconv_convert(&inStr, sizeof(inStr), "GBK", &outStr, sizeof(outStr), "UTF-8") > 0){
44 Label* label1 = Label::createWithSystemFont(outStr, "fonts/arial.ttf", 24); 
45 }
46 */

 

转载于:https://www.cnblogs.com/chevin/p/5707610.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值