cocos2d-x学习笔记(八)使用NDK自带的iconv进行编码转换

cocos2d-x学习笔记(八)使用NDK自带的iconv进行编码转换,第1张

概述    cocos2d-x显示中文乱码最常用的解决方式主要有xml文件读取、使用iconv库。由于在使用iconv库出现了比较多的问题,这里作个总结,给后来人少走一些弯路。     我用的是cocos2d-x 3.4的版本,我也是参照网上的教程,但可能一些细节教程里面没有提到,这里就详细列出来。     1、在cocos2d-x端新建一个ChineseString.h文件 代码如下: #ifnde

cocos2d-x显示中文乱码最常用的解决方式主要有xml文件读取、使用iconv库。由于在使用iconv库出现了比较多的问题,这里作个总结,给后来人少走一些弯路。

我用的是cocos2d-x 3.4的版本,我也是参照网上的教程,但可能一些细节教程里面没有提到,这里就详细列出来。

1、在cocos2d-x端新建一个ChineseString.h文件

代码如下:

#ifndef__ChineseString_H__#define__ChineseString_H__#if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)#include"../../../software/androID-ndk-r10e/sources/androID/support/include/iconv.h"#endif#if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)#include"external/win32-specific/icon/include/iconv.h"#endif#include<string>#pragmacomment(lib,"libiconv.lib")staticcharg_GBKConvUTF8Buf[5000]={0};classChineseString{public:staticconstchar*GBKToUTF8(char*strChar){iconv_ticonvH;iconvH=iconv_open("utf-8","gb2312");if(iconvH==0){returnNulL;}size_tstrLength=strlen(strChar);size_toutLength=strLength*4;size_tcopyLength=outLength;memset(g_GBKConvUTF8Buf,5000);char*outbuf=(char*)malloc(outLength);char*pBuff=outbuf;memset(outbuf,outLength);if(-1==iconv(iconvH,&strChar,&strLength,&outbuf,&outLength)){iconv_close(iconvH);returnNulL;}memcpy(g_GBKConvUTF8Buf,pBuff,copyLength);free(pBuff);iconv_close(iconvH);returng_GBKConvUTF8Buf;}};#endif


2、AndroID端

网上有一种方法要自己下载iconv库,我觉得那种方法挺麻烦的,而且我自己跟着步骤试了下,没有成功,后面放弃了,最后又找了一种方法,也就是下面要介绍的用NDK自带的iconv库。

我用的是androID-ndk-r10e,可以发现有个iconv.h文件,也就是上面cocos2d-x端代码里引用的路径

#if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)#include"../../../software/androID-ndk-r10e/sources/androID/support/include/iconv.h"#endif

这个根据自己ndk存放的路径做调整。

然后修改proj.androID/jni目录下的AndroID.mk文件

主要加了

LOCAL_STATIC_liBRARIES+=androID_support
$(callimport-module,androID/support)

在相应的地方加入这两段代码

650) this.width=650;" src="http://img.jb51.cc/vcimg/static/loading.png" title="QQ截图20160914093522.png" alt="wKioL1fYqWqR0SYJAABY88e_luE261.png-wh_50" src="http://s1.51cto.com/wyfs02/M01/87/3B/wKioL1fYqWqR0SYJAABY88e_luE261.png-wh_500x0-wm_3-wmp_4-s_2332078002.png">

做了以上这些步骤,正常情况下是可以通过了。


注意以下几点:

1、androID编译碰到如下错误

invalID conversion from 'const char**' to 'char**'

这是由于我们定义GBKToUTF8这个函数时,参数使用const char* strChar,然后传入iconv函数时ndk的iconv.h定义的是size_t iconv(iconv_t,char**,size_t*,size_t*); 所以只需要把const去掉就ok了。

2、网上有介绍说ndk r9的iconv.h代码有问题,需要修改如下,大家注意一下就行,r10是没有这个问题

//将#ifdef__cplus_plus//改为#ifdef__cplusplus}//extern"C"#endif
总结

以上是内存溢出为你收集整理的cocos2d-x学习笔记(八)使用NDK自带的iconv进行编码转换全部内容,希望文章能够帮你解决cocos2d-x学习笔记(八)使用NDK自带的iconv进行编码转换所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1081779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存