91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

cocos2d-x學習筆記(八)使用NDK自帶的iconv進行編碼轉換

發布時間:2020-07-03 18:12:08 來源:網絡 閱讀:3321 作者:wty530 欄目:游戲開發

    cocos2d-x顯示中文亂碼最常用的解決方式主要有xml文件讀取、使用iconv庫。由于在使用iconv庫出現了比較多的問題,這里作個總結,給后來人少走一些彎路。

    我用的是cocos2d-x 3.4的版本,我也是參照網上的教程,但可能一些細節教程里面沒有提到,這里就詳細列出來。

    1、在cocos2d-x端新建一個ChineseString.h文件

代碼如下:

#ifndef __ChineseString_H__
#define __ChineseString_H__
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "../../../software/android-ndk-r10e/sources/android/support/include/iconv.h"
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#include "external/win32-specific/icon/include/iconv.h"
#endif
#include <string>
#pragma comment(lib, "libiconv.lib")
static char g_GBKConvUTF8Buf[5000] = {0};
class ChineseString
{
public:
static const char* GBKToUTF8(char *strChar)
{
iconv_t  iconvH;
iconvH = iconv_open("utf-8", "gb2312");
if(iconvH == 0)
{
return NULL;
}
size_t strLength = strlen(strChar);
size_t outLength = strLength * 4;
size_t copyLength = outLength;
memset(g_GBKConvUTF8Buf, 0, 5000);
char* outbuf = (char*)malloc(outLength);
char* pBuff = outbuf;
memset(outbuf, 0, outLength);
if (-1 == iconv(iconvH, &strChar, &strLength, &outbuf, &outLength))  
{  
iconv_close(iconvH);  
return NULL;  
}  
memcpy(g_GBKConvUTF8Buf,pBuff,copyLength);  
free(pBuff);  
iconv_close(iconvH);  
return g_GBKConvUTF8Buf;
}
};
#endif


    2、Android端

    網上有一種方法要自己下載iconv庫,我覺得那種方法挺麻煩的,而且我自己跟著步驟試了下,沒有成功,后面放棄了,最后又找了一種方法,也就是下面要介紹的用NDK自帶的iconv庫。

    我用的是android-ndk-r10e,可以發現有個iconv.h文件,也就是上面cocos2d-x端代碼里引用的路徑

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "../../../software/android-ndk-r10e/sources/android/support/include/iconv.h"
#endif

這個根據自己ndk存放的路徑做調整。

然后修改proj.android/jni目錄下的Android.mk文件

主要加了

LOCAL_STATIC_LIBRARIES += android_support
$(call import-module, android/support)

在相應的地方加入這兩段代碼

cocos2d-x學習筆記(八)使用NDK自帶的iconv進行編碼轉換

做了以上這些步驟,正常情況下是可以通過了。


注意以下幾點:

1、android編譯碰到如下錯誤

invalid conversion from 'const char**' to 'char**' 

這是由于我們定義GBKToUTF8這個函數時,參數使用const char* strChar,然后傳入iconv函數時ndk的iconv.h定義的是size_t  iconv(iconv_t, char**, size_t*, char**, size_t*); 所以只需要把const去掉就ok了。

2、網上有介紹說ndk r9的iconv.h代碼有問題,需要修改如下,大家注意一下就行,r10是沒有這個問題

//將#ifdef __cplus_plus  
//改為  
#ifdef __cplusplus  
}  // extern "C"  
#endif

 




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武城县| 江川县| 青冈县| 乐平市| 黔西| 明星| 稻城县| 茶陵县| 清徐县| 民乐县| 河南省| 成安县| 西和县| 定南县| 筠连县| 太和县| 永福县| 大兴区| 泗阳县| 岳阳县| 蒲江县| 嘉峪关市| 沙河市| 武义县| 吉隆县| 拉孜县| 西宁市| 札达县| 金乡县| 独山县| 东兰县| 沂源县| 灵寿县| 嘉义市| 陕西省| 广昌县| 阿克| 德化县| 玉门市| 耒阳市| 改则县|