Android的字符编码转换问题,Unicode,GB2312,UTF8等
16lz
2022-04-19
/* 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 ---------------------------*/
更多相关文章
- 代码中设置drawableleft
- android 3.0 隐藏 系统标题栏
- Android开发中activity切换动画的实现
- Android(安卓)学习 笔记_05. 文件下载
- Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
- 技术博客汇总
- android 2.3 wifi (一)
- AndRoid Notification的清空和修改
- Android中的Chronometer