参考文章:http://momowing.diandian.com/post/2013-01-16/40047183777
不过我要做点修改,把函数改掉,因为到android中会报错,如下:
conversion from 'char const**' to 'char**' [-fpermissive]。。。。。。。。。。。。。。。。
这个解决方法:
把有const删了,即可。
我还是具体讲讲 在android上编译iconv吧:


一: 新建一个android项目,并且导入eclipse中(应该都知道);


二: 去网上下载个iconv的库文件:https://dl.dropbox.com/u/99895284/iconv.zip解压,并且得到iconv文件夹,把该文件夹放入cocos2d-x的文件夹下:如图



三: 修改新建的android项目中的jni/Android.mk文件,如图:



//其中 编译的Tools是我新建的类,用于编码转换,也就是用到iconv的一个类。

四: 为了以后编译更加简单,我还把iconv这个文件夹复制到ndk目录下的source文件夹:如图
为什么我放到这里,可以参考我的一篇博客:http://blog.csdn.net/cwn0812/article/details/10741275

五: 配置项目属性: 1): Builders -> new -> Program 2): Main -> Location -> Browse File System -> 选择NDK路径下的 ndk-build.cmd文件,确认 Main -> Working Directory -> Browse Workspace -> 选择你的项目,确认 3): Refresh -> 打钩Refresh resources upon completion -> 选择Specific resources -> 选择项目的jni文件夹,确定 4): 跳过Environment ,因为我把要编译的文件夹都放到了ndk目录的resource文件夹下了 5): Build Options -> 打钩during a “Clean” ,和Specify working ... 并且选中选择项目的jni文件夹确定, 具体参考上面说的博客,里面有图。

六: 完成。clean 下项目。如图:

七:我封装的类Tools (参考他们写的类,做些修改)
Tools.cpp
int Tools::code_convert( char *from_charset, char *to_charset, char *inbuf, size_t inlen, char *outbuf, size_t outlen ){iconv_t cd;char *temp = inbuf;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 Tools::u2a( const char *_inbuf ){char *inbuf = new char[strlen(_inbuf)+1];strcpy(inbuf, _inbuf);size_t inlen = strlen(inbuf);char * outbuf = new char[inlen * 2 + 2];string strRet;if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * 2 + 2) == 0){strRet = outbuf;}delete [] inbuf;delete [] outbuf;return strRet;}std::string Tools::a2u( const char *_inbuf ){char *inbuf = new char[strlen(_inbuf)+1];strcpy(inbuf, _inbuf);size_t inlen = strlen(inbuf);char * outbuf = new char[inlen * 2 + 2];string strRet;if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 + 2) == 0){strRet = outbuf;}delete [] outbuf;delete [] inbuf;return strRet;}

在HelloWorldScene.cpp中调用
std::string str = Tools::a2u("中文 哈哈wuliao");CCLabelTTF* label = CCLabelTTF::create(str.c_str(),"Arial",27);label->setPosition(ccp(size.width/2,size.height/2));this->addChild(label);

运行到真机,测试成功啦。


更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  7. Android开发常用调试技术记录
  8. Android学习笔记(四) 之模拟发短信
  9. Android(安卓)使用setContentView来实现Acitivity的跳转

随机推荐

  1. c语言九九乘法表代码如何写
  2. c语言结构化程序设计的三种基本结构是什
  3. c语言如何求n个数的平均值?
  4. c语言字符常量的合法表示形式是什么
  5. c语言规定,函数返回值的类型是由什么决定
  6. unsigned int几个字节
  7. c语言如何读取txt文件内容?
  8. c语言常量的正确表示方法有哪些
  9. c语言static关键字的作用是什么
  10. .net framework有什么用