Android的字符编码转换问题,Unicode,GB2312,UTF8等

来源:互联网 发布:胸卡 名片制作软件 编辑:程序博客网 时间:2024/05/22 18:56
/* jernymy 2011-12-01 * Android word encoder process, need libicuuc.so Api * just a example**//*--------------------------- tst.cpp ---------------------------*//* use dl API include file */#include <dlfcn.h>/* typedef a function pointer to pointer ucnv_convert method */#ifndef LPCSTRtypedef const char*     LPCSTR;#endif#ifndef LPSTRtypedef       char*     LPSTR;#endif#ifndef s32typedef unsigned long   s32;#endiftypedef void (*pvUcnvFunc)(LPCSTR lpcstrDstEcd, LPCSTR lpcstrSrcEcd, LPSTR lpstrOut, s32 nOutLen, LPCSTR lpstrIn, s32 nInLen, s32 *pnErrCode);/* ucnv_convert method pointer */static pvUcnvFunc g_pvUcnvConvert = NULL;/* pointer libicuuc.so dl lib */static void*      g_pvUcnvDll = NULL;/*see the source code defineint32_t  ucnv_convert(  const char *toConverterName,const char *fromConverterName,char *target,int32_t targetSize,const char *source,int32_t sourceSize,UErrorCode * err)*/void UcnvConvert(LPSTR lpstrOut, s32 nOutLen, LPCSTR lpstrIn, s32 *pnErrC){/* load so for word convert */if (NULL == g_pvUcnvDll){g_pvUcnvDll = dlopen("/system/lib/libicuuc.so", RTLD_LAZY);  }if (NULL == g_pvUcnvDll){LOGE("(NULL == g_pvUcnvDll)");return;}/* get convert Api pointer */if (NULL == g_pvUcnvConvert){/* here is Android 2.2 version, Android 2.1 version change to ucnv_convert_3_8 */g_pvUcnvConvert = (pvUcnvFunc)dlsym(g_pvUcnvDll, "ucnv_convert_4_2");}if (NULL == g_pvUcnvConvert){LOGE("(NULL == g_pvUcnvConvert)");return;}    /*     * utf8   --> the Destination encoder     * gb2312 --> the Source      encoder    **/    g_pvUcnvConvert("utf8", "gb2312", lpstrOut, nOutLen, lpstrIn, strlen(lpstrIn), pnErrC);  }/*--------------------------- tst.cpp ---------------------------*//*--------------------------- Android.mk ---------------------------*/# android for nc makefileLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# current path, local path jni/COMN_PATH    := $(LOCAL_PATH)/../../../10-commonLOCAL_CFLAGS += -D_LINUX_ -g -fno-rtti -fno-short-enums -D_ANDROID_LOCAL_CPP_EXTENSION := .cppLOCAL_C_INCLUDES := \LOCAL_LDLIBS :=-L$(SYSROOT)/usr/lib -llog -ldlLOCAL_MODULE    := tstLOCAL_SRC_FILES := tst.cppinclude $(BUILD_SHARED_LIBRARY)/*--------------------------- Android.mk ---------------------------*/



原创粉丝点击