• iconv编码转换


    环境:cocos2dx 3.10

    1.vs环境下编译windows版本,需要增加头文件和链接库
    ①cocos2d-x-3.10externalwin32-specificiconinclude
    ②cocos2d-x-3.10externalwin32-specificiconprebuilt

    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         //返回转换了多少空间,用来计算剩余多少空间(可以用于确定写入的位置;但是如果src中已经包含了则无需再写入)
    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 */

     

  • 相关阅读:
    面试官:Redis 有哪些拓展方案?
    面试官:为什么要合并 HTTP 请求?
    Java 调用第三方接口,实战来了!
    Java 如何模拟真正的并发请求?
    如何搭建一台永久运行的个人服务器?试试这个黑科技!
    vs2005 sp1 出来啦!!
    2007年第一帖
    xp pro sp2支持多个用户同时终端连接
    msn中实现 "添加一个活动或游戏邀请"
    softether
  • 原文地址:https://www.cnblogs.com/chevin/p/5707610.html
Copyright © 2020-2023  润新知