Android NDK 下的宽字符编码转换及icu库的使
(2012-06-14 01:41:29)
标签:
的
icu
android
杂谈
Android NDK 下的宽字符编码转换及icu库的使Android NDK 下的宽字符编码转换及icu库的使用
原贴http://topic.csdn.net/u/20101022/16/1b2e0cec-b9d2-42ea-8d9c-4f1bb8320a54.html?r=70149216
,看过并动手实现,记录下来以备再用。
如果是在java层,有String类可以很好的转换各种编码,在ndk下面就没有现成的公开的工具,不过可以用icu4c。
ICU4C
是IBM的国际化开发组件ICU的C语言实现版本。在android系统里也有实现。ndk里面并没有公开可用的api,需要自己加载动态库来调用转换函数。
android下icu库路径为"/system/lib/libicuuc.so",主要用到的转换函数为ucnv_convert_?_?。这里的问号是根据版本的不同函数名也不一样。在2.2的模拟器中的libicuuc.so中此函数名为ucnv_convert_4_2,在2.1模拟器中为
ucnv_convert_3_8,貌似要根据版本不同来分开对待,还没发现可以统一的办法。
函数原型:
void ucnv_convert(const char *http://www.fongyuen.com, const char
*, char * , int32_t , const char *, int32_t,int32_t*);
用法:
//声明函数指针 void (*ucnv_convert)(const char *, const char *, char * ,
int32_t , const char *, int32_t,int32_t*)=0;
//加载动态库
void* pDL =
dlopen("/system/lib/libicuuc.so",
RTLD_LAZY);
//这里以android2.2为例,函数名就是ucnv_convert_4_2
ucnv_convert = (void (*)(const char *, const char *, char * ,
int32_t , const char *, int32_t,int32_t*))dlsym(pDL,
"ucnv_convert_4_2");
//加载成功就可以用了
if(ucnv_convert
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。