cocos2d-x引入中文支持库并移植到android平台

cocos2d-x引入中文支持库并移植到android平台 

2013-09-01 17:10:17|  分类: android |  标签:libiconv  iconv  cocos2d-x  中文  android  |字号大中小订阅

在cocos2d-x中直接使用中文会显示乱码,什么从xml文件读取中文,将文件格式保存为utf-8,都不是解决方法,会出现一些其它的问题。Cocos2d-x提供了iconv库,解决中文问题。

1》  win32环境

1.1》        vs环境配置

引入头文件,cocos2d-x根目录下cocos2d\platform\third_party\win32\iconv

cocos2d-x引入中文支持库并移植到android平台 - 珑儿 - 顾影自怜
 

引入库,libiconv.lib

cocos2d-x引入中文支持库并移植到android平台 - 珑儿 - 顾影自怜
  

1.2》        代码

#include "iconv.h"

int code_convert(const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen)

{

    iconv_t cd;

    const char *temp = inbuf;

    const char **pin = &temp;

    char  **pout = &outbuf;

    memset(outbuf,0,outlen);

    cd = iconv_open(to_charset,from_charset);

    if(cd==0) return -1;

    if(iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;

    iconv_close(cd);

    return 0;

}

std::string u2a(const char *inbuf)

{

    size_t inlen = strlen(inbuf);

    char * outbuf = new char[inlen * 2 + 2];

    std::string strRet;

    if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * 2 + 2) == 0)

    {

        strRet = outbuf;

    }

    delete [] outbuf;

    return strRet;

}

std::string a2u(const char *inbuf)

{

    size_t inlen = strlen(inbuf);

    char * outbuf = new char[inlen * 2 + 2];

    std::string strRet;

    if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 + 2) == 0)

    {

        strRet = outbuf;

    }

    delete [] outbuf;

    return strRet;

}

//使用

CCLabelTTF* pStartLabel = CCLabelTTF::create(a2u("开始").c_str(), "Arial", 60);

 

2》  android环境

android下就不能直接使用cocos2d-x提供的iconv库,需要下载一个已经在linux环境下编译好的iconv库。下载地址:http://download.csdn.net/detail/wanrue/6192757

2.1》使用cygwin对libiconv库进行编译

    安装cygwin,注意安装Devel(开发)目录下附加项,否则会提示没有make等命令。

    从官网下载libiconv-1.14.tar.gz包,打开cygwin,解压,进入libiconv-1.14根目录,执行./configure,然后执行make。这样就已经成功编译好android平台下使用的libiconv包了。

2.2》环境配置

1. 将libiconv放置在cocos2d-x-2.1.4根目录下

2. 在libiconv目录下新建Android.mx文件,内容如下:

LOCAL_PATH:= $(call my-dir)

#libiconv.so

include $(CLEAR_VARS)

LOCAL_MODULE := libiconv_static

LOCAL_MODULE_FILENAME := libiconv

LOCAL_CFLAGS := \

  -Wno-multichar \

  -DAndroid \

  -DLIBDIR="c" \

  -DBUILDING_LIBICONV \

  -DIN_LIBRARY

LOCAL_SRC_FILES := \

  libcharset/lib/localcharset.c \

  lib/iconv.c \

  lib/relocatable.c

LOCAL_C_INCLUDES += \

  $(LOCAL_PATH)/include \

  $(LOCAL_PATH)/libcharset \

  $(LOCAL_PATH)/lib \

  $(LOCAL_PATH)/libcharset/include \

  $(LOCAL_PATH)/srclib

include $(BUILD_STATIC_LIBRARY)

3.与Classes平级目录下新建thirdparty目录,将libiconv目录中include目录下的iconv.h文件拷贝进去。

4.编辑proj.android项目下jni目录中Android.mx文件。

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \

                     $(LOCAL_PATH)/../../thirdparty

LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static

LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static

LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static

LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static

LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static

LOCAL_WHOLE_STATIC_LIBRARIES += libiconv_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,libiconv)

$(call import-module,cocos2dx)

2.3》可能会出现的错误

2.3.1》如果在libiconv目录下没有Android.mx文件,那么ndk会找不到libiconv模块,提示:

Android NDK: jni/Android.mk: Cannot find module with tag 'libiconv' in import path   

Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?   

Android NDK: The following directories were searched:   

Android NDK:        

jni/Android.mk:30: *** Android NDK: Aborting.    .  Stop.

2.3.2》localcharset.c文件错误

D:\cocos2d-x-2.1.4\cocos2d-x-2.1.4/libiconv/libcharset/lib/localcharset.c: In function 'get_charset_aliases':

D:\cocos2d-x-2.1.4\cocos2d-x-2.1.4/libiconv/libcharset/lib/localcharset.c:130:8: error: 'c' undeclared (first use in this function)

D:\cocos2d-x-2.1.4\cocos2d-x-2.1.4/libiconv/libcharset/lib/localcharset.c:130:8: note: each undeclared identifier is reported only once for each function it appears in

make: *** [obj/local/armeabi/objs/iconv_static/libcharset/lib/localcharset.o] Error 1

解决办法:

修改libiconv\libcharset\lib下localcharset.c文件,将int c声明提前。

113       get_charset_aliases (void)

114     {

115       int c;//

116       const char *cp;

 

157           for (;;)

158      {

159       //int c;      

160        char buf1[50+1];


一些可能有用的参考:

[Cocos2D-X]使用iconv解决VS上中文显示乱码的问题+android导入第三方库iconv

vs+cocos2d-x 导入第三方库 移植到android

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值