cocos2dx使用iconv 多国语言要用到开源字符转换
2014-08-14 11:26
246 查看
本文转自新浪微博:点击打开链接
1.下载
在windows上用iconv.dll,在IOS上系统有提供这个库,导入就可以,在android上要自己去下一个。
http://ftp.gnu.org/pub/gnu/libiconv/
这个是官网地址,目前iconv最新版本是1.14,2011.8.7版本的,大小4.8M
官方地址:
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
2.下载完毕,解压放到Engine目录下,改名为iconv,和cocos2dx,CocosDenshion,extensions等同目录
3.在iconv目录下增加Android.mk文件,写入
LOCAL_PATH:= $(call my-dir)
#libiconv.so
include $(CLEAR_VARS)
LOCAL_MODULE := iconv_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)
4. 在工程的Android.mk里修改,加入这个lib和include目录(下面的路径要根据项目实际情况修改)
LOCAL_C_INCLUDES := $(LOCAL_PATH) \
:
$(LOCAL_PATH)/../../../../../Engine/iconv/include \
$(LOCAL_PATH)/../../../../../Engine/iconv/libcharset \
$(LOCAL_PATH)/../../../../../Engine/iconv/lib \
$(LOCAL_PATH)/../../../../../Engine/iconv/libcharset/include \
$(LOCAL_PATH)/../../../../../Engine/iconv/srclib \
$(LOCAL_PATH)/../../../../../Engine/iconv \
#================================
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += iconv_static
LOCAL_CFLAGS := $(MYCOMPILE_FLAG)
include $(BUILD_SHARED_LIBRARY)
$(call import-module,cocos2dx)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
$(call import-module,external/Box2D)
$(call import-module,external/chipmunk)
$(call import-module,iconv)
5。网上很多教程都说到这里,但实际上,如果这个时候进行编译,问题还一大堆。
1)iconv.h不存在,在ivonv/include/有 iconv.h.in, iconv.h.build.in,就是没看到iconv.h
把iconv.h.in改名成iconv.h,发现编译很多错误
主要错误是类型不匹配,还有很多@符号。
因此需要进行修改。主要改法是不存在的改成存在的,@符号去掉
下面是我自己改完之后的iconv.h文件。编译OK.颜色的是修改的(本来完整的,但是发出来后注释和include好像被新浪给吃没了)
#ifndef _LIBICONV_H
#define _LIBICONV_H
#define _LIBICONV_VERSION 0x010E
extern int _libiconv_version;
#undef iconv_t
#define iconv_t libiconv_t
typedef void* iconv_t;
#include
#include
#ifndef EILSEQ
#define EILSEQ 84
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef LIBICONV_PLUG
#define iconv_open libiconv_open
#endif
extern iconv_t iconv_open (const char* tocode, const char* fromcode);
#ifndef LIBICONV_PLUG
#define iconv libiconv
#endif
extern size_t iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);//iconv.c要相应修改
#ifndef LIBICONV_PLUG
#define iconv_close libiconv_close
#endif
extern int iconv_close (iconv_t cd);
#ifdef __cplusplus
}
#endif
#ifndef LIBICONV_PLUG
#if USE_MBSTATE_T
#if BROKEN_WCHAR_H
#include
#include
#include
#endif
#include
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
void* dummy1[28];
#if USE_MBSTATE_T
mbstate_t dummy2;
#endif
} iconv_allocation_t;
#define iconv_open_into libiconv_open_into
extern int iconv_open_into (const char* tocode, const char* fromcode,
iconv_allocation_t* resultp);
#define iconvctl libiconvctl
extern int iconvctl (iconv_t cd, int request, void* argument);
typedef void (*iconv_unicode_char_hook) (unsigned int uc, void* data);
typedef void (*iconv_wide_char_hook) (wchar_t wc, void* data);
struct iconv_hooks {
iconv_unicode_char_hook uc_hook;
iconv_wide_char_hook wc_hook;
void* data;
};
typedef void (*iconv_unicode_mb_to_uc_fallback)
(const char* inbuf, size_t inbufsize,
void (*write_replacement) (const unsigned int *buf, size_t buflen,
void* callback_arg),
void* callback_arg,
void* data);
typedef void (*iconv_unicode_uc_to_mb_fallback)
(unsigned int code,
void (*write_replacement) (const char *buf, size_t buflen,
void* callback_arg),
void* callback_arg,
void* data);
#if HAVE_WCHAR_T
typedef void (*iconv_wchar_mb_to_wc_fallback)
(const char* inbuf, size_t inbufsize,
void (*write_replacement) (const wchar_t *buf, size_t buflen,
void* callback_arg),
1.下载
在windows上用iconv.dll,在IOS上系统有提供这个库,导入就可以,在android上要自己去下一个。
http://ftp.gnu.org/pub/gnu/libiconv/
这个是官网地址,目前iconv最新版本是1.14,2011.8.7版本的,大小4.8M
官方地址:
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
2.下载完毕,解压放到Engine目录下,改名为iconv,和cocos2dx,CocosDenshion,extensions等同目录
3.在iconv目录下增加Android.mk文件,写入
LOCAL_PATH:= $(call my-dir)
#libiconv.so
include $(CLEAR_VARS)
LOCAL_MODULE := iconv_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)
4. 在工程的Android.mk里修改,加入这个lib和include目录(下面的路径要根据项目实际情况修改)
LOCAL_C_INCLUDES := $(LOCAL_PATH) \
:
$(LOCAL_PATH)/../../../../../Engine/iconv/include \
$(LOCAL_PATH)/../../../../../Engine/iconv/libcharset \
$(LOCAL_PATH)/../../../../../Engine/iconv/lib \
$(LOCAL_PATH)/../../../../../Engine/iconv/libcharset/include \
$(LOCAL_PATH)/../../../../../Engine/iconv/srclib \
$(LOCAL_PATH)/../../../../../Engine/iconv \
#================================
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += iconv_static
LOCAL_CFLAGS := $(MYCOMPILE_FLAG)
include $(BUILD_SHARED_LIBRARY)
$(call import-module,cocos2dx)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
$(call import-module,external/Box2D)
$(call import-module,external/chipmunk)
$(call import-module,iconv)
5。网上很多教程都说到这里,但实际上,如果这个时候进行编译,问题还一大堆。
1)iconv.h不存在,在ivonv/include/有 iconv.h.in, iconv.h.build.in,就是没看到iconv.h
把iconv.h.in改名成iconv.h,发现编译很多错误
主要错误是类型不匹配,还有很多@符号。
因此需要进行修改。主要改法是不存在的改成存在的,@符号去掉
下面是我自己改完之后的iconv.h文件。编译OK.颜色的是修改的(本来完整的,但是发出来后注释和include好像被新浪给吃没了)
#ifndef _LIBICONV_H
#define _LIBICONV_H
#define _LIBICONV_VERSION 0x010E
extern int _libiconv_version;
#undef iconv_t
#define iconv_t libiconv_t
typedef void* iconv_t;
#include
#include
#ifndef EILSEQ
#define EILSEQ 84
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef LIBICONV_PLUG
#define iconv_open libiconv_open
#endif
extern iconv_t iconv_open (const char* tocode, const char* fromcode);
#ifndef LIBICONV_PLUG
#define iconv libiconv
#endif
extern size_t iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);//iconv.c要相应修改
#ifndef LIBICONV_PLUG
#define iconv_close libiconv_close
#endif
extern int iconv_close (iconv_t cd);
#ifdef __cplusplus
}
#endif
#ifndef LIBICONV_PLUG
#if USE_MBSTATE_T
#if BROKEN_WCHAR_H
#include
#include
#include
#endif
#include
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
void* dummy1[28];
#if USE_MBSTATE_T
mbstate_t dummy2;
#endif
} iconv_allocation_t;
#define iconv_open_into libiconv_open_into
extern int iconv_open_into (const char* tocode, const char* fromcode,
iconv_allocation_t* resultp);
#define iconvctl libiconvctl
extern int iconvctl (iconv_t cd, int request, void* argument);
typedef void (*iconv_unicode_char_hook) (unsigned int uc, void* data);
typedef void (*iconv_wide_char_hook) (wchar_t wc, void* data);
struct iconv_hooks {
iconv_unicode_char_hook uc_hook;
iconv_wide_char_hook wc_hook;
void* data;
};
typedef void (*iconv_unicode_mb_to_uc_fallback)
(const char* inbuf, size_t inbufsize,
void (*write_replacement) (const unsigned int *buf, size_t buflen,
void* callback_arg),
void* callback_arg,
void* data);
typedef void (*iconv_unicode_uc_to_mb_fallback)
(unsigned int code,
void (*write_replacement) (const char *buf, size_t buflen,
void* callback_arg),
void* callback_arg,
void* data);
#if HAVE_WCHAR_T
typedef void (*iconv_wchar_mb_to_wc_fallback)
(const char* inbuf, size_t inbufsize,
void (*write_replacement) (const wchar_t *buf, size_t buflen,
void* callback_arg),
相关文章推荐
- 关于struts Validator在多模块下多国语言资源访问的问题解决之道(一)struts Validator下使用多模块的多国语言资源
- 使用Visual Studio做WINFORM多国语言就是这么简单
- Android多国语言使用
- [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)
- android多国语言使用
- 最好的FCKeditor编辑器,使用方法(多国语言的)
- android多国语言使用
- 使用Java语言开发,一定会用到的网站开发工具大全
- android多国语言使用
- android多国语言使用
- Winform中多国语言窗体的设计以及.NET中资源文件的使用
- (转)使用SE String Resouce制作多国语言程序资源文件
- Winform 多国语言窗体的设计以及.NET中资源文件的使用
- 使用谷歌翻译/微软翻译迅速使你的博客支持多国语言
- android多国语言使用
- Winform中多国语言窗体的设计以及.NET中资源文件的使用
- Winform中多国语言窗体的设计以及.NET中资源文件的使用_____摘自 TJVictor的专栏
- 使用ICU4C进行多国语言应用程序开发(1) —— 发布多国语言库
- [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)
- 【COCOS2DX-LUA 脚本开发之一】LUA语言基础在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途