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. getpeername

    定义: int getpeername(int s, struct sockaddr *name, socklen_t *namelen); 描述: 获取socket的对方地址   得到对方的地址 s ...

  2. oracle 11g SQL Developer instead of isqlplus

    Oracle11g的新工具SQL DEVELOPER,替代了 isqlplus 1.创建连接方式 2.SQL输入窗口 3.表的结构及其他信息查阅 4.SQL语句测试 5.创建表 6.用户授权 7.数据 ...

  3. awk当中使用外部变量

    1.awk命令使用双引号的情况下 此时在awk命令里面使用\"$var\"就可以引用外部环境变量的var的值 $ var="BASH";echo "u ...

  4. spring事务传播机制实例讲解

    http://kingj.iteye.com/blog/1680350   spring事务传播机制实例讲解 博客分类:   spring java历险     天温习spring的事务处理机制,总结 ...

  5. Form验证(转)

    代码写 N 久了,总想写得别的.这不,上头说在整合两个项目,做成单一登录(Single Sign On),也有人称之为“单点登录”.查阅相关文档后,终于实现了,现在把它拿出来与大家一起分享.或许大家会 ...

  6. 可视化PK纯代码

    简述 其实今天说的内容不仅仅局限于Qt,在很多其它语言或者框架中也适用,那就是 - 用可视化工具or文本编辑器?拖or不拖? 如果有人问我喜欢脱or不脱?我会毫不犹豫地说不脱,因为我比较矜持O(∩_∩ ...

  7. [反汇编练习] 160个CrackMe之011

    [反汇编练习] 160个CrackMe之011. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  8. UVA 1663 Purifying Machine (二分图匹配,最大流)

    题意: 给m个长度为n的模板串,模板串由0和1和*三种组成,且每串至多1个*,代表可0可1.模板串至多匹配2个串,即*号改成0和1,如果没有*号则只能匹配自己.问:模板串可以缩减为几个,同样可以匹配原 ...

  9. 【DFS+堆的二叉树结构】15轻院校赛-J-堆

    [题目链接:J-堆] 1734: 堆 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 239  Solved: 113 SubmitStatusWeb B ...

  10. jquery插件——日历控件

    今天在网上有看到一个jquery插件——日历控件,不过之前也在柯乐义的网站上看到了(http://keleyi.com/ 推荐下) 这个插件看着比较大气,所以干脆也分享下,以后自己也好用一点儿 1.页 ...