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. MongoDB安装及简单实验

    1.Windows下安装MongoDB http://www.mongodb.org/downloads 下载msi,下一步下一步… 安装完毕后,到安装目录的bin目录下执行mongod启动数据库服务 ...

  2. sql 存储过程 循环使用

    USE [clab] GO /****** Object: StoredProcedure [dbo].[sp_bd_getResultByEcd] Script Date: 08/06/2014 1 ...

  3. POJ 3468 A Simple Problem with Integers(树状数组)

    题目链接:http://poj.org/problem?id=3468 题意:给出一个数列,两种操作:(1)将区间[L,R]的数字统一加上某个值:(2)查询区间[L,R]的数字之和. 思路:数列A,那 ...

  4. Parallel WebDriver executions using TestNG

    In this post, we will see how does one make use of TestNG to kick off parallel UI tests using WebDri ...

  5. 函数fsp_get_space_header

    /**********************************************************************//** Gets a pointer to the sp ...

  6. main cannot be resolved or is not a field

    今天在做XML解析的时候,总是给我报 XML Parsing Error: XML or text declaration not at start of entity 的错误,后来查了下讲大概意思是 ...

  7. I.MX6 Ethernet UI patch failed

    /*********************************************************************** * I.MX6 Ethernet UI patch f ...

  8. DataGuard相同SID物理Standby搭建

    Oracle Data Guard 是针对企业数据库的最有效和最全面的数据可用性.数据保护和灾难恢复解决方案.它提供管理.监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数据不受 ...

  9. java transient简介

    我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable ...

  10. js除法余数

    return (Math.round(rs*100)/100); //保保留小数点后两位数: //如果要保留三位则改为:Math.round(rs*1000)/1000; //如果要保留四位则改为:M ...