基于NDK下的编码转换,当然是直接调用C/C++下的实现效率更高,下面介绍2种方案(不建议通过JNI调用JAVA的实现,尽管这样也能实现编码的转换)。
1. 采用Android系统自带的libicuuc.so库
2. 采用第三方编码转换库libiconv,源码链接:http://ftp.gnu.org/pub/gnu/libiconv/
libiconv的使用有3个函数:
a) iconv_t iconv_open (const char* tocode, const char* fromcode);
b) size_t iconv (iconv_t cd, const char* * inbuf , size_t * inbytesleft, char* * outbuf , size_t * outbytesleft);
inbytesleft:inbuf的字符串长度;
outbytesleft:输入为outbuf所指向的缓冲区长度,输出为剩余没用到的缓冲区长度;因此转换后的字符串长度为(outbuflen - outbytesleft);
inbuf, outbuf:返回时指针都后移了,需要注意。
c) int iconv_close (iconv_t cd);
这里采用Android系统自带的库进行编码转换,当然也可采用第三方支持。以下贴出代码段
(gbk和Unicode的互转因为没有用到,所以未贴出,但我想你应该要会了吧):</