Android NDK 下的宽字符编码转换及icu库的使用
来源:互联网 发布:安卓版三星缩水软件 编辑:程序博客网 时间:2024/06/03 22:18
原贴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 *, const char *, char * , int32_t , const char *, int32_t,int32_t*);
用法:
转换成功后的字符串就放在buffer里面,如果出错了就会在errcode里面放错误代码。
如标题所示,ndk下还有一个宽字符,也就是wchar_t的问题,跟其他平台移植也是个麻烦的事。
linux下wchar_t默认是4个字节,而windows下(包括CE,MOBILE)和symbian下都是2个字节。解决的办法是在android.mk文件中,找到LOCAL_CFLAGS 为其加上编译开关 -fshort-wchar(如果没有此项就手动写上),如 LOCAL_CFLAGS := -fshort-wchar 。这样强制编译器用2个字节处理wchar_t,不过编译时会有warning,可以不管。
这样虽然编译器处理成2个字节,但是预编译的库libc等依然是4个字节,会导致wcslen等函数无法使用(其实ndk下wcslen本来就是废的),解决的办法可以重新编译libc,不过最简单的还是自己实现wcslen就行了。
下面的代码是copy网上的,具体哪里的忘了,可以把wchar_t转换成char字符串,这样就可以用icu库随意转换了。
使用wstr2cstr就可以转换出来。这里还有个字节序的问题,在W2C函数里面,一个wchar_t转到char究竟是低位在前还是高位在前恐怕还是要看转换前后的编码具体对待。
- Android NDK 下的宽字符编码转换及icu库的使用
- Android NDK 下的宽字符编码转换及icu库的使用
- Android NDK 下的宽字符编码转换及icu库的使用
- Android NDK 下的宽字符编码转换及icu库的使用
- icu 字符编码探测及字符编码转换实例
- ICU-International Components for Unicode-字符编码的转换-先记下
- 跨平台的文字编码转换方法--ICU
- 字符编码、字符存储、字符转换及工程中字符的使用
- Android NDK的C/C++代码中利用JNI回调实现字符编码转换
- Android NDK的C/C++代码中利用JNI回调实现字符编码转换
- Android NDK的C/C++代码中利用JNI回调实现字符编码转换
- icu 字符串编码探测及字符串编码转换实例
- icu 字符串编码探测及字符串编码转换实例
- 使用ICU库中的正则表达式匹配关键字之间含有特殊字符的关键字示例
- QT下中文字符编码的转换
- QT下中文字符编码的转换
- java下的字符编码转换总结
- Linux 下的字符编码转换
- android程序调试
- 集群监视软件Ganglia
- 使用links方式安装Eclipse插件
- 方便的集群网络安装软件clonezilla
- Spring 定义Default错误显示页面
- Android NDK 下的宽字符编码转换及icu库的使用
- Moab 5.2.0+Torque 2.2.1/pbs集群作业可视化管理系统部署试验
- CComPtr和CComQIPtr的区别
- 基于ArcGIS Flex API开发Mobile应用
- JAVA中使用DBCP做数据库连接池
- 浅谈Java中的同步的方法和原理
- How come the necessity regarding vocab advancement thus essential?
- maven入门总结
- 关于数的二进制的深入理解