[Cocos2D-X]使用iconv解决VS上中文显示乱码的问题+android导入第三方库iconv

本文介绍了如何在Cocos2D-X项目中解决Visual Studio中的中文乱码问题,通过附加libiconv.lib依赖并封装编码转换函数。同时,提供了解决方案:将CPP文件保存为UTF-8编码,以确保在Android(Eclipse)上编译后不出现乱码。此外,详细说明了Win32项目移植到Android的步骤和可能遇到的编译错误。
摘要由CSDN通过智能技术生成

前言


    由于cocos2d-x内部是以utf8处理文本的,而VS直接输入时文本编码为GBK,所以在类似在CCLabelTTF等上显示中文时会出现乱码。
    以下是解决该问题,较便捷的方法之一。


1. 在VS中给项目附加依赖项里加入libiconv.lib

    在VS“解决方案资源管理器”视图中——项目->属性->配置属性->连接器->输入->附加依赖项里填写“libiconv.lib”,多个lib以空格隔开(等同于“#pragma comment(lib, "libicon.lib")”语句)。

    

    
    
    



2.包含头文件iconv/iconv.h.,并通过这个库封装几个编码转换函数

   代码如下:
    

#include "iconv\iconv.h"
#include <iostream>
#include <cstring>

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תΪGB2312*/
std::string u2a(const char *inbuf)
{
    size_t inlen = strlen(inbuf);
    char * outbuf = new char[inlen * 2 + 2];
    std::string strRet;
    if(code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, inlen * 2 + 2) == 0)
    {
        strRet = outbuf;
    }
    delete [] outbuf;
    return strRet;
}
     
/*GB2312תΪUTF8*/
std::string a2u(const char *inbuf)
{
    size_t inlen = strlen(inbuf);
    char * outbuf = new char[inlen * 2 + 2];
    std::string strRet;
    if(code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, inlen * 2 + 2) == 0)
    {
        strRet = outbuf;
    }
    delete [] outbuf;
    return strRet;
}

    然后在每次要使用中文前,用a2u函数将文本转换为utf-8编码,使用例程如下:
    char lifebuff[1024];
    sprintf(lifebuff, "生命值:"); 
    lifeIndicator->setString(a2u(lifebuff).c_str());


  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值