作者:何卫

转载请注明,原文链接:http://www.cnblogs.com/hewei2012/p/3374147.html

iconv下载(Android)

源码下载地址,已编译完的iconv包(用这个即可)

ios自带libiconv.dylib,只需#include <iconv.h>即可 

步骤

1.libiconv解压文件放置

直接将解压的libiconv文件夹放在cocos2dx游戏引擎cocos2d-2.1rc0-x-2.1.2目录下

libiconv中Andriod.mk文件内容为:

LOCAL_PATH:= $(call my-dir)
#libiconv.so
include $(CLEAR_VARS)
LOCAL_MODULE := libiconv_static LOCAL_MODULE_FILENAME := 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)

2.修改自己工程中的Andriod.mk文件

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static libiconv_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions) \
$(call import-module,libiconv)

蓝色为变化的内容

3.iconv.h头文件拷贝

将程序中cocos2dx\platform\third_party\win32目录下的iconv文件夹拷贝到自己工程的Classes目录下

4.程序修改

.h文件

#include "iconv/iconv.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#pragma comment(lib,"libiconv.lib")
#endif /*---------------------------------------------------*/
// iconv转码
/*---------------------------------------------------*/
static int code_convert( const char *from_charset, const char *to_charset, const char *inbuf, size_t inlen, char *outbuf, size_t outlen );
static std::string u2a( const char *inbuf );
static std::string a2u( const char *inbuf );

.cpp文件

 int CCommonTool::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,,outlen);
cd = iconv_open(to_charset,from_charset);
if(cd==) return -;
if(iconv(cd,pin,&inlen,pout,&outlen)==-) return -;
iconv_close(cd);
return ;
} /*UTF8 To GB2312*/
string CCommonTool::u2a( const char *inbuf )
{
size_t inlen = strlen(inbuf);
char * outbuf = new char[inlen * + ];
string strRet;
if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * + ) == )
{
strRet = outbuf;
}
delete [] outbuf;
return strRet;
} /*GB2312 To UTF8*/
string CCommonTool::a2u( const char *inbuf )
{
size_t inlen = strlen(inbuf);
char * outbuf = new char[inlen * + ];
string strRet;
if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * + ) == )
{
strRet = outbuf;
}
delete [] outbuf;
return strRet;
}

程序使用

CCString ccStr;
ccStr.m_sString = CCommonTool::a2u(ccStr.m_sString.c_str());

希望能给你帮助~

cocos2d_x iconv转码的更多相关文章

  1. 忽略 iconv 转码错误导致输出中断

    在遇到一些特殊字符时候,使用iconv转码会提示报错,导致整段文字输出为空,解决的方法是增加TRANSLIT//IGNORE $str = iconv("UTF-8", " ...

  2. cocos2dx中使用iconv转码(win32,iOS,Android)

    首先贴下环境:Win7 64, NDK r8e, libiconv-1.14, cygwin 一 Win32环境配置 Cocos2D-X自带有win32上的iconv库.仅仅须要配置一下就可以使用. ...

  3. 使用iconv进行编码gb2312转utf8 转码失败的坑

    iconv 编码gb2312转utf8 转码失败的坑 使用背景 项目中使用thrift进行C#程序调用c++接口,其中的协议是通过json进行传输的,由于默认thrift使用utf8进行传输,而C#和 ...

  4. php 转码函数 你还在用iconv吗?-- 解决sqlserver插入中文失败问题

    文章来源 :http://www.veryhuo.com/a/view/41348.html 这次给客户同步sqlserver数据,临时搭的 PHP Query Analyzer 插入某些中文一直有些 ...

  5. cocos2dx libiconv 转码

    iconv下载(Android)已编译完的iconv包(用这个即可) ios自带libiconv,只需#include <iconv.h>即可  步骤 1.libiconv解压文件放置 直 ...

  6. 将iconv编译成lua接口

    前一篇博文说了.在cocos2dx中怎么样使用iconv转码,这节我们将上一节中写的转码函数,做成一个lua接口.在lua脚本中使用. 网上能够下载到luaconv.可是编译的时候总是报错,所以自己写 ...

  7. php的iconv函数中utf8与utf-8的差异

    开发中遇到一个奇怪的问题:报错如下: iconv() [<a href='function.iconv'>function.iconv</a>] : Wrong charset ...

  8. 解决PHP下导出csv乱码小记

    我们之前都是使用PHPexcel导出我们的一些数据的,由于Phpexcel对导出超出1万条数据会导至超时和内存暴涨,后来我们就改用数据导出成csv格式的. 相信很多朋友们在用PHP导出csv文件时都遇 ...

  9. Linux curl命令参数详解

    笔者出处:http://www.aiezu.com/system/linux/linux_curl_syntax.html linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支 ...

随机推荐

  1. 【转】 ios开发证书CER文件、P12文件,mobileprovition许可文件的用途

    钥吻合之后.我们一般会给证书做个备份,这个备份就是个P12文件. 这个p12文件很好用,它不仅包含CER的信息,还有私钥信息,即: P12备份文件 = CER文件  + 私钥:所以有了这个p12就再也 ...

  2. 响应式设计中几个class区别

    table-responsive:在小屏幕时不对内容做任何额外排版,只是允许左右滑动 scrollable-area:先尝试挤压起来,实在不行再左右滑动

  3. 用 Javascript 获取页面大小、窗口大小和滚动条位置

    页面大小.窗口大小和滚动条位置这三个数值在不同的浏览器例如 Firefox 和 IE 中有着不同的实现.即使在同一种浏览器例如 IE 中,不同版本也有不同的实现. 本文给出两个能兼容目前所有浏览器的 ...

  4. input框内默认文字点击消失

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. jdbc操作数据库返回结果集的注意事项

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  6. 设置VMWARE通过桥接方式使用主机无线网卡上网(zz)

    环境:WIN7旗舰版,台式机,U盘无线上网卡. 虚拟软件:VMware9.0,虚拟系统:CentOS6.4 需要实现虚拟机以独立机形式工作和上网. 先介绍一下VMware网络设置的三种方式 1 Hos ...

  7. [Everyday Mathematics]20150224

    设 $A,B$ 是 $n$ 阶实对称矩阵, 它们的特征值 $>1$. 试证: $AB$ 的特征值的绝对值 $>1$.

  8. cp: omitting directory”错误的解释和解决办法

    在linux下拷贝的时候有时候会出现cp:omitting directory的错误 ,例如 cp:omitting directory "bbs" 说明bbs目录下面还有目录,不 ...

  9. [转]linux的du和df命令

    转自:http://blog.csdn.net/kmesg/article/details/6570800 今天也有同学问我Linux下查看目录大小的命令,现在也将前阵子学习到du/df两个命令总结一 ...

  10. redhat Enterprise Linux Server release 7.2(Maipo) 安装redis-stat

    项目需要在rh7.2安装redis-stat,各种编译不过.通过一步步跟踪编译错误日志发现时缺少各种开发库. 需要安装的库列表如下: zlib-devel openssl-devel readline ...