Cocos2d-x 对于中文的支持-----iconv库

转自:http://momowing.diandian.com/post/2013-01-16/40047183777

Jetion:

我们在win32下创建类的时候,文件都是默认的ANSI的格式,如果你使用了中文,那么你在win32下就会看到乱码。当然,移植Android的时候,你把文件格式改为UTF-8即可。

但是为了方便win32下的调试,也为了省事点,我们需要一种方法能直接在win32和Android下显示中文的,这时候我们就需要用到iconv库的,cocos2d-x自带第三方库iconv。



在需要用到的地方,我们只要这么声明就可以:

1
2
#include
"platform\third_party\win32\iconv\iconv.h"
#pragma
comment(lib,"libiconv.lib")

或者在VS中这么处理:



当然还是得加上

1
#include
"platform\third_party\win32\iconv\iconv.h"

这样子你就能引用cocos2d-x中自带的iconv库了。

但是当你移植到Android的时候,也许你正在使用cygwin编译,然后发现它报了:

convert_open等方法没找到的错误,因为Android手机上面是不带这个库的,所以你没法找到相关的方法。

这时候我能想到的就是自己去搞一个iconv库来编译到Android上面使用了。

首先:你要去网上下一个iconv库,这边我给出我用的iconv库,虽然不能保证都能用,但是至少我在Android2.3上面是没问题的。下载链接

或许你也可以在网上找到合适的iconv库。

其次:把iconv库解压放到cocos2d-x的根目录下

然后:修改你Android的mk。这里也给出mk的添加代码,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LOCAL_C_INCLUDES
:= $(LOCAL_PATH)/../../../HelloWorld/proj.win32 \
$(LOCAL_PATH)/../../../HelloWorld/Classes 
\
 $(LOCAL_PATH)/../../../iconv
\
            $(LOCAL_PATH)/../../../iconv/include
\
            $(LOCAL_PATH)/../../../iconv/libcharset
\
            $(LOCAL_PATH)/../../../iconv/libcharset/lib
\
            $(LOCAL_PATH)/../../../iconv/libcharset/include                
              
LOCAL_WHOLE_STATIC_LIBRARIES
:= iconv cocos2dx_static cocosdenshion_static cocos_extension_static
                          
include
$(BUILD_SHARED_LIBRARY)
              
$(call
import-module,CocosDenshion/android) \
$(call
import-module,cocos2dx) \
$(call
import-module,extensions) \
$(call
import-module,iconv)

最后:给出转换为UTF-8的格式的代码,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
intDataController::code_convert(
constchar

*from_charset,
constchar

*to_charset,
constchar

*inbuf,
size_tinlen,
char*outbuf,
size_toutlen
)
{
    iconv_t
cd;
    constchar

*temp = inbuf;
    constchar

**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);
    return0;
}
/*UTF8
To GB2312*/
string
DataController::u2a(
constchar

*inbuf )
{
    size_tinlen
=
strlen(inbuf);
    char*
outbuf =
newchar[inlen
* 2 + 2];
    string
strRet;
    if(code_convert("utf-8","gb2312",
inbuf, inlen, outbuf, inlen * 2 + 2) == 0)
    {
        strRet
= outbuf;
    }
    delete[]
outbuf;
    returnstrRet;
}
/*GB2312
To UTF8*/

//使用中文时用该函数转换
string
DataController::a2u(
constchar

*inbuf )
{
    size_tinlen
=
strlen(inbuf);
    char*
outbuf =
newchar[inlen
* 2 + 2];
    string
strRet;
    if(code_convert("gb2312","utf-8",
inbuf, inlen, outbuf, inlen * 2 + 2) == 0)
    {
        strRet
= outbuf;
    }
    delete[]
outbuf;
    returnstrRet;
}

PS: 链接无法直接点击下载的话,请使用右键->迅雷下载

Cocos2d-x 对于中文的支持-----iconv库的更多相关文章

  1. zabbix开启对中文的支持--&&--中文乱码解决方法

    zabbix不支持中文图 开启zabbix对中文的支持 原来zabbix默认把对中文的支持给关闭了,我们需要修改zabbix的php源文件. 修改站点根目录下include/locales.inc.p ...

  2. 解决嵌入式linux系统下iconv库的移植问题

    一.解决问题    在arm开发板上使用framebuff,在汉字显示时,因为只有gb2312的16*16的汉字字库,而ubuntu16.04默认    的编码方式时utf-8,因此需要进行转码(ut ...

  3. Linux下安装libiconv使php支持iconv函数

    libiconv组件安装好了可以让我们php支持iconv函数了,这个函数的作用就是字符编码强制转换了,下面和111cn小编一起来看一个Linux中安装libiconv使php支持iconv函数的例子 ...

  4. cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题

    当我写这篇文章的时候我是怀着激动的心情的,因为我又解决了一个技术问题.你可能对题目还一知半解,这是什么意思,我之所以要写这篇文章就是要解决当我们在cocos2dx中使用了第三方库的时候,移植到andr ...

  5. Source Insight中文操作支持的宏

    以下是Source Insight中文字符串支持的宏的实现,在此做个备份. 代码来自网上,非笔者所写.原有代码有个明显的Bug(Del的时候会导致多删除一个字符和多插入一个空格),已经被笔者fix掉. ...

  6. Raneto中文搜索支持

    背景 因业务部门需要在线软件使用说明文档,但我们资源不足,故我想找一个开源的知识库,发现 Raneto不错,决定使用. 官方文档相当清晰,部署完成,发布一些文章,启动项目,交由业务同事测试使用,于是我 ...

  7. Mybatis Generator的model生成中文注释,支持oracle和mysql(通过实现CommentGenerator接口的方法来实现)

    自己手动实现的前提,对maven项目有基本的了解,在本地成功搭建了maven环境,可以参考我之前的文章:maven环境搭建 项目里新建表时model,mapper以及mapper.xml基本都是用My ...

  8. SciTE: 中文字符支持问题

    SciTE: 中文字符支持问题   SciTE(Scintilla Text Editor)是一个体积小巧的文本编辑器. 但是它默认的设置对中文字符处理不好,其实只要对它进行相应的配置,就可以了. 1 ...

  9. cenos 上的php 支持GD库问题

    ---恢复内容开始--- thinkphp 开发的项目verify类无法引用,原因是没有开启gd库 环境:CentOS 6.4,php-5.3.3需求:php支持GD库解决方案:GD是Linux下的一 ...

随机推荐

  1. twitter bootstrap 2.x 3.x区别

    栅格系统 (Grid system)说个我认为比较重要的,相对于RC 1中的3层,现在有4层了 We now have .col-xs (phones), .col-sm (tablets), .co ...

  2. kail新手安装

    Kali Linux下载链接:http://mirrors.ustc.edu.cn/kali-images/kali-2.0/ (ps:建议用国内镜像源下载,速度有保证) Kali Linux安装之后 ...

  3. 在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务(老罗学习笔记5)

    在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行.今天大家对iOS和Android系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件.因此,软件和硬件的关系 ...

  4. 注册表删除chrome插件

    注册表,对于绝大部分人来说,都是一个比较陌生的东西.然而,我们的几乎所有软件都会在这里出现. 就最近一次,公司给每个员工的chrome浏览器绑定的一堆插件,并且无法删除.手动删除插件文件后,重启机器又 ...

  5. 【转载】React入门-Todolist制作学习

    我直接看的这个React TodoList的例子(非常好!): http://www.reqianduan.com/2297.html 文中示例的代码访问路径:http://127.0.0.1:708 ...

  6. UVa 1636 (概率) Headshot

    既然是第一道概率题,就正儿八经地分析一下吧. 题意: 有一个左轮枪,里面随机装了或者没装子弹,用一个01序列表示.现在已知扣动第一次扳机没有子弹,问是继续扣动扳机还是随机转动一下再扣,那种选择使得第二 ...

  7. OK335xS PMIC(TPS65910A3A1RSL) reset

    /*********************************************************************** * OK335xS PMIC(TPS65910A3A1 ...

  8. ASIHttpRequest编译不通过

    转:http://blog.sina.com.cn/s/blog_67a5e47201014tof.html Undefined symbols for architecture i386:   &q ...

  9. 苹果iphone4s完美越狱后破解4g网络方法

    苹果iphone4s完美越狱后破解4g网络方法教程 作者:佚名 字体:[增加 减小] 来源:互联网 时间:01-15 10:07:25我要评论 自从港版iPhone5s/c能够破解移动4G网络后, i ...

  10. Spring分布式事务实现

    分布式事务是指操作多个数据库之间的事务,spring的org.springframework.transaction.jta.JtaTransactionManager,提供了分布式事务支持.如果使用 ...