cocos2d-x 中文输出 GB2312与UFT8互转
2014-04-21 12:02
232 查看
刚刚入门cocos2d-x的时候,第一个运行的项目就是"hello world",但是想打印出"你好世界"是不是发现输出的都是乱码?
原因就是c默认的编码是GB2312,但是现在我们的程序使用的是UTF8编码.
现在有两个办法解决中文正确输出的问题:
第一种办法
点击你要保存的文件,
点击文件下的高级保存选项,
将编码改为UTF-8带签名,就可以了.
下面我们来说第二种办法
1.在你的cocos2d的目录下搜索iconv文件夹,这个文件夹中的内容是这样的
将这个文件夹复制到你的cocos2d的根目录下.
2.在项目的附加包含目录中加入$(SolutionDir)iconv\include;(如果是新的生成办法则加入$(ProjectDir)..\..\..\iconv\include;)
3.在项目的附加依赖项中加入libiconv.lib;
4.贴代码啦~
.h
.cpp
贴一个使用方法吧
结束了? NONONO,现在仅仅是在PC上运行OK,现在还无法编译出 .so文件,所以下面我们要修改Android.mk
直接打开mk修改就好了
添加
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../iconv/include \
$(LOCAL_PATH)/../../iconv/libcharset \
$(LOCAL_PATH)/../../iocnv/libcharset/lib \
$(LOCAL_PATH)/../../iocnv/libcharset/include \
$(LOCAL_PATH)/../../iconv \
$(LOCAL_PATH)/../../libiconv/lib \
$(LOCAL_PATH)/../../libiconv/srclib
LOCAL_WHOLE_STATIC_LIBRARIES := libiconv cocos2dx_static cocosdenshion_static cocos_extension_static
$(call import-module,iconv) \
ok,搞定,到你的手机上运行看看吧!
原因就是c默认的编码是GB2312,但是现在我们的程序使用的是UTF8编码.
现在有两个办法解决中文正确输出的问题:
第一种办法
点击你要保存的文件,
点击文件下的高级保存选项,
将编码改为UTF-8带签名,就可以了.
下面我们来说第二种办法
1.在你的cocos2d的目录下搜索iconv文件夹,这个文件夹中的内容是这样的
将这个文件夹复制到你的cocos2d的根目录下.
2.在项目的附加包含目录中加入$(SolutionDir)iconv\include;(如果是新的生成办法则加入$(ProjectDir)..\..\..\iconv\include;)
3.在项目的附加依赖项中加入libiconv.lib;
4.贴代码啦~
.h
#ifndef _CTRANSCODING_H_ #define _CTRANSCODING_H_ #include "iconv.h" #include "cocos2d.h" #include "platform/third_party/win32/iconv/iconv.h" USING_NS_CC; #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) #pragma comment(lib,"libiconv.lib") #endif int UtF_8(char* from_charset, char* to_charset, char* intbuf, size_t inlen, char* outbuf, size_t outlen); char* a2u(const char* ipt,bool g_u = true); #endif
.cpp
#include "CTranscoding.h" int UtF_8(char* from_charset, char* to_charset, char* intbuf, size_t inlen, char* outbuf, size_t outlen) { iconv_t iconvH; iconvH = iconv_open(to_charset, from_charset); if (!iconvH) return 0; memset(outbuf, 0, outlen); #if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) char* temp = intbuf; char** pin = &temp; char** pout = &outbuf; if (!iconv(iconvH, pin, &inlen, pout, &outlen)) { iconv_close(iconvH); return 0; } #else if (!iconv(iconvH, &intbuf, &inlen, &outbuf, &outlen)) { iconv_close(iconvH); return 0; } #endif iconv_close(iconvH); return 0; } char* a2u(const char* ipt,bool g_u) { char buf[1024] = {}; memcpy(buf,ipt,(int)strlen(ipt)); memset(my_output,0,1024); if(buf[0] == 0) { my_output[0] = ' '; return my_output; } size_t inlen = strlen(buf); size_t outlen = inlen << 1; if(g_u) UtF_8("gb2312", "utf-8",buf, inlen, my_output, outlen); else UtF_8("utf-8", "gb2312",buf, inlen, my_output, outlen); //my_output是一个全局char* 我开了1024,这个可以根据项目对中文需求的长度来设定,因为重复需求,所以定义全局会比较方便 return my_output; }
贴一个使用方法吧
CCLabelTTF* mylabel = CCLabelTTF::create(a2u("你好世界"), "Arial", 18); mylabel->setPosition(ccp(200 , 200)); this->addChild(mylabel);
结束了? NONONO,现在仅仅是在PC上运行OK,现在还无法编译出 .so文件,所以下面我们要修改Android.mk
直接打开mk修改就好了
添加
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../iconv/include \
$(LOCAL_PATH)/../../iconv/libcharset \
$(LOCAL_PATH)/../../iocnv/libcharset/lib \
$(LOCAL_PATH)/../../iocnv/libcharset/include \
$(LOCAL_PATH)/../../iconv \
$(LOCAL_PATH)/../../libiconv/lib \
$(LOCAL_PATH)/../../libiconv/srclib
LOCAL_WHOLE_STATIC_LIBRARIES := libiconv cocos2dx_static cocosdenshion_static cocos_extension_static
$(call import-module,iconv) \
ok,搞定,到你的手机上运行看看吧!
相关文章推荐
- Cocos2d-x 输出中文和版权符号的方法
- php解决json_encode输出GB2312中文问题 (数组)
- cocos2d-x 输出中文的方法
- Cocos2d-x VS2010 win32 输出中文字符的方法
- cocos2d_x使用iconv库转码解决中文显示问题
- EBS输出HTML报表中文乱码
- android客户端与sae交互中文处理 gb2312
- 【Scikit-Learn 中文文档】监督学习:从高维观察预测输出变量 - 关于科学数据处理的统计学习教程 - scikit-learn 教程 | ApacheCN
- Eclipse控制台中的中文输出乱码问题
- ZendStudio控制台输出中文乱码问题的解决
- 因utf-8编码引起js输出中文乱码的解决办法
- VC UTF-8与中文(GB2312)相互转换
- cocos2d-x 将cocosbuilder输出文件映射成对象的原理
- 用dom4j建立,修改XML文档,并解决格式化输出和中文问题
- php输出UTF-8格式XML文件中文乱码问题(含asp,asp.net,jsp代码)
- Ubuntu下,python输出中文
- cocos2d-x 显示中文字符和解析XML文件
- struts的action直接输出中文备注【原创】
- 中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030