個人部落格: 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庫
4、編寫iconv庫所需的android.mk。
這步要仔細看了,很多文章這步沒寫清楚,讓我走了許多冤枉路。
進入到剛才解壓出的iconv檔案夾,用記事本之類的建立一個android.mk檔案,這其實相當于linux的makefile檔案。
android.mk内容:
這部分不要寫錯了,大家盡量copy下來。
5、編寫android項目裡面的android.mk檔案。
在搭建安卓編譯環境的時候,大家寫了一個android.mk。這個相當于把所有庫的android.mk做了一個彙總。
這個android.mk位于gameclient01/proj.android/jni下。打開後,拉到尾部:
這個尾部的内容原本是這樣的:
請大家修改成這樣:
紅色部分是修改的地方。
第一個紅圈增加了一些路徑依賴。隻要大家以下兩個檔案是這麼放的,路徑就不會有錯,就不用糾結于多少個../,當然,大家也可以直接寫上絕對路徑。
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編譯看看:
7、在項目中使用:
寫兩個函數:
convert(...),
gbktoutf8(...);
頭檔案:iconvstring.h
源檔案:iconvstring.cpp
如果有遇到轉碼後少了一個字的,一定注意strncpy這一步。