天天看點

Cocos2d-x下使用iconv庫

個人部落格: alex-my.xyz    

近來在用戶端搭建打包apk的環境,以及解決中文亂碼問題。網上找了很多資料,但總是各種不詳細,非常麻煩。是以在這裡把自己的過程詳細記錄下,如果有哪步不詳細,請留言。

    用戶端使用的是cocos2d-x-2.0.4,是一個比較老的版本了。使用cygwin和eclipse交叉編譯出apk包。環境搭建另外寫一篇文章,這邊主要講使用iconv庫。很多人嘗試在解決亂碼問題時,也都會嘗試使用iconv庫,但因為遇到各種問題而放棄,比較常見的有找不到"iconv.h",或者是編譯之後找不到iconv_open, iconv_close等函數。

    在這次使用iconv庫的過程中,參考了一些文章,大家也可以移步去看看。

     http://bbs.csdn.net/topics/390285784?page=1#post-393310132

     http://codingnow.cn/cocos2d-x/1038.html

     最近找到另外一篇文章,講的也不錯也很簡潔,也可以參考下(2014/02/25)

     http://blog.csdn.net/smileyuping/article/details/9635365

     亂碼問題目前遇到的是寫在用戶端上的文字在真機上亂碼,服務端發送到用戶端的文字亂碼。以前看到一篇文章,說有三種解決方案。

     1、用戶端全部使用utf-8檔案。

      這種辦法對于寫在用戶端上的文字還是挺有用的,但對于服務端發送過來的中文就顯示亂碼了,但如果是單機還是挺推薦的。可以用宏定義的方法将固定的内容定義在某個檔案,如果想發展國外市場版本,可以直接拿這個檔案給翻譯。

     2、使用iconv庫。

     當時也嘗試過,但總是遇到各種問題,加上進度問題,就放棄了,轉而使用第1種方法。

     3、使用xml檔案讀取。

     這個對于單機遊戲來說,也是不錯的,省很多麻煩,特别是以後想發展國外市場需要多語言版的。配上rapidxml解析庫,還是挺不錯的。

    ___________________________________________________________

     iconv的配置使用過程:

    1、預設是搭建好安卓打包環境的。

    2、下載下傳iconv庫。

     大家可以去官網上下載下傳:http://ftp.gnu.org/pub/gnu/libiconv/

     網速不好的或者打不開的,可以到我的資源裡邊下載下傳:

     http://download.csdn.net/detail/alex_my/6036049

     大家下載下傳下來後,比如是libiconv-114,可以将檔案夾重命名成iconv。

    3、解壓iconv庫

Cocos2d-x下使用iconv庫

    4、編寫iconv庫所需的android.mk。

     這步要仔細看了,很多文章這步沒寫清楚,讓我走了許多冤枉路。

     進入到剛才解壓出的iconv檔案夾,用記事本之類的建立一個android.mk檔案,這其實相當于linux的makefile檔案。

Cocos2d-x下使用iconv庫

     android.mk内容:

   這部分不要寫錯了,大家盡量copy下來。

  5、編寫android項目裡面的android.mk檔案。

   在搭建安卓編譯環境的時候,大家寫了一個android.mk。這個相當于把所有庫的android.mk做了一個彙總。

   這個android.mk位于gameclient01/proj.android/jni下。打開後,拉到尾部:

   這個尾部的内容原本是這樣的:

Cocos2d-x下使用iconv庫

   請大家修改成這樣:

Cocos2d-x下使用iconv庫

   紅色部分是修改的地方。

   第一個紅圈增加了一些路徑依賴。隻要大家以下兩個檔案是這麼放的,路徑就不會有錯,就不用糾結于多少個../,當然,大家也可以直接寫上絕對路徑。

    iconv檔案夾位置: cocos2d-x-2.0.4-1/iconv

   安卓環境彙總的 android.mk: cocos2d-x-2.0.4-1/gameclient01/proj.android/jni/android.mk

  第二個紅圈增加了一個iconv_static,這個是在iconv/android.mk中命名的。

  第三個紅圈中的iconv其實就是我們下載下傳的iconv庫的檔案夾名字。

  6、到此,配置就結束了。大家可以使用cygwin編譯看看:

Cocos2d-x下使用iconv庫

  7、在項目中使用:

   寫兩個函數:

   convert(...),

   gbktoutf8(...);

    頭檔案:iconvstring.h

   源檔案:iconvstring.cpp

如果有遇到轉碼後少了一個字的,一定注意strncpy這一步。

繼續閱讀