cocos2d-x封装一个转码的工具解决中文乱码可以直接拖过去用通用跨平台

今天白白给大家分享一个转码的工具函数,如果大家需要在项目中显示中文,可以直接使用,Android和IOS部分都是通用的,不用太麻烦的分平台操作。

转载请注明地址http://blog.csdn.net/u010229677

首先,这个函数是这样的,可以直接拖进去用

<span style="font-size:18px;"><span style="font-size:18px;">#ifndef __TRANSFORMUTF__
#define __TRANSFORMUTF__
#include "../../../win32-specific/icon/include/iconv.h"
#pragma comment(lib,"libiconv.lib")
#include "cocos2d.h"
using namespace std;

//使用方法:string s = GBtoUTF("确定");  或者  <span style="font-family: Arial, Helvetica, sans-serif;">string s = </span><span style="font-family: Arial, Helvetica, sans-serif;">UTFtoGB</span><span style="font-family: Arial, Helvetica, sans-serif;">("确定");</span>

static int code_convert( const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen )
{
	iconv_t cd;
	const char *temp = inbuf;
	const 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;
}
/*UTF8 To GB2312*/
static string UTFtoGB( const char *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 [] outbuf;
	return strRet;
}
/*GB2312 To UTF8*/ //使用中文时用该函数转换
static string GBtoUTF( const char *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;
	return strRet;
}

#endif</span></span>

好了,这样大家就能直接用了,这里使用到了iconv这个库,

首先我们需要下载一个iconv这个库

然后大家将下载到的iconv库解压至项目根目录。也就是和cocos2dx, extensions这些库的同级目录。

将这个库拖到ios里面,这样ios这边就能直接工作了,

对于windows这边,配置一下库就可以了

Android环境,大家照下面方法做就ok

编写iconv库所需的Android.mk。

这步要仔细看了,很多文章这步没写清楚,让我走了许多冤枉路。

进入到刚才解压出的iconv文件夹,用记事本之类的建立一个Android.mk文件,

将下面内容复制到这个文件中,不要写错,很重要的

<span style="font-size:18px;">LOCAL_PATH:= $(call my-dir)
#libiconv.so
include $(CLEAR_VARS)
LOCAL_MODULE := libiconv
LOCAL_CFLAGS :=   -Wno-multichar   -DAndroid   -DLIBDIR="c"   -DBUILDING_LIBICONV   -DIN_LIBRARY

LOCAL_SRC_FILES :=   libcharset/lib/localcharset.c   lib/iconv.c   lib/relocatable.c

LOCAL_C_INCLUDES +=   $(LOCAL_PATH)/include   $(LOCAL_PATH)/libcharset   $(LOCAL_PATH)/lib   $(LOCAL_PATH)/libcharset/include   $(LOCAL_PATH)/srclib
include $(BUILD_STATIC_LIBRARY)</span>

编写Android项目里面的Android.mk文件,如下图所示

cocos2d-x3.0以前的版本:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_C_INCLUDES +=   $(LOCAL_PATH)/../iconv/include   $(LOCAL_PATH)/../libiconv/libcharset   $(LOCAL_PATH)/../libiconv/lib   $(LOCAL_PATH)/../libiconv/libcharset/include   $(LOCAL_PATH)/../libiconv/srclib   $(LOCAL_PATH)/../iconv

LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += libiconv

include $(BUILD_SHARED_LIBRARY)

$(call import-module,cocos2dx)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
$(call import-module,external/Box2D)
$(call import-module,external/chipmunk)
$(call import-module,iconv)

cocos2d-x3.0以后的版本:建议把iconv库放到cocos2d文件夹里面,前面操作不便,只是项目的android.mk配置是这样的

LOCAL_C_INCLUDES +=   $(LOCAL_PATH)/../../iconv/include   $(LOCAL_PATH)/../../libiconv/libcharset   $(LOCAL_PATH)/../../libiconv/lib   $(LOCAL_PATH)/../../libiconv/libcharset/include   $(LOCAL_PATH)/../../libiconv/srclib   $(LOCAL_PATH)/../../iconv

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static

# LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static
# LOCAL_WHOLE_STATIC_LIBRARIES += spine_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
 LOCAL_WHOLE_STATIC_LIBRARIES += libiconv

include $(BUILD_SHARED_LIBRARY)

$(call import-module,.)
$(call import-module,audio/android)
$(call import-module,extensions)
$(call import-module,editor-support/cocostudio)

# $(call import-module,Box2D)
# $(call import-module,editor-support/cocosbuilder)
# $(call import-module,editor-support/spine)
# $(call import-module,editor-support/cocostudio)
# $(call import-module,network)
# $(call import-module,extensions)
 $(call import-module,iconv)

这样我们的工作就开顺利开心的完成了

cocos2d-x封装一个转码的工具解决中文乱码可以直接拖过去用通用跨平台

时间: 2024-10-23 21:28:36

cocos2d-x封装一个转码的工具解决中文乱码可以直接拖过去用通用跨平台的相关文章

mac osx wine 1.7.5 源码编译方法及中文乱码的解决

源码编译 1.先安装apple-gcc42,Mac osx自带的 llvm-gcc,编译后,无法运行wine. 1 sudo port install apple-gcc42 2.下载wine源码 1 2 git clone git://source.winehq.org/git/wine.git ~/wine-git cd ~/wine-git 3.安装 X11/XQuartz ,官网下载 XQuartz 4.我是用的是1.7.5编译的 1 git checkout -b 1.7.5 wine

android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Holder须要设置type,否则会黑屏(感谢网友[(α ⒎待sんа)294439435]) com.example.qu.MainActivity的第50行mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 今天发现 在com.exampl

charles抓包工具的中文乱码解决方法

charles是 MAC上最好用的抓包工具.charles 网上的参考文档已经很多,我就不再赘述啦.只是说说我在安装过程遇到的问题和解决方法,仅供参考. charles抓包的数据中的中文内容显示乱码,网上很多是通过修改 info.plist 文件解决的,点击这里查看解决方法:https://www.v2ex.com/t/255040 我在尝试以上方法后依然没有解决,翻遍 google, 前人之鉴的方法还是很多,只是茫茫网海中找到的也是很不容易的,这个方法大家可以参考下咯~~~ 1. 打开 cha

封装一个自己的 Ajax小框架

框架代码如下: // 使用封装方法的人只关心提供http的请求方法,url地址,数据,成功和失败的回调方法 // 类的构造定义,主要职责就是新建出 XMLHttpRequest 对象 var MyXMLHttpRequest = function () { var xmlhttprequest; if (window.XMLHttpRequest) { xmlhttprequest = new XMLHttpRequest(); if (xmlhttprequest.overrideMimeTy

封装一个Ajax工具函数

/*封装一个ajax工具函数*/ window.$ = {}; /*通过$定义一个ajax函数*/ /* * 1. type   string   请求的方式  默认是get * 2. url    string   请求地址  接口地址 * 3. async  boolean  默认的是true * 4. data   object   {}请求数据 * * 5.success function  成功回调函数 * 6.error   function  失败的回调函数 * */ $.ajax

封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil

封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创建Logger类,完整代码如下: using NLog; using NLog.Config; using NLog.Mongo; using NLog.Targets; using System; using System.Collections.Generic; using System.IO;

Swift:简单封装一个工具类模板

创建模板类(封装一个类)新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var description: String var price: Double var stock: Int init(name: String, description: String, price: Double, stock: Int) { self.name = name self.description =

爬取当当网的图书信息之封装一个工具类

把这个类名取为Tool 封装一个下载网页的方法GetHtml public static string GetHtml(string url) { try { WebClient wb = new WebClient(); return wb.DownloadString(url); } catch { return ""; } } 传入的是这个网页的URL,这个方法能帮我们把网页下载下来封装一个匹配图书类URL的的方法 public static ArrayList GetList(

封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------------------------------------------------------------------------------ 不知众多Android开发者是否在程序开发的工程中也遇到过下面的问题: 0.如何在众多log中快速找到你设置打印的那行log? 1.是否还在不断的切换标签来