NDK与java传递中文字符的解决办法
来源:互联网 发布:淘宝卖家退款要验证码 编辑:程序博客网 时间:2024/05/21 21:50
遇到转换中文字符的问题,windows下的jni开发可以直接使用windows下的api函数MultiByteToWideChar来转换,但NDK中没法使用,尝试使用C中的mbstowcs代替,依然不行,查了一下,居然在NDK下mbstowcs不起作用,形同虚设,根本不支持宽字符的转换!
网上有说是可以使用ICU库来实现转换,折腾半天还是不能实现,转换函数ucnv_convert总是失败,返回错误码为4,在网上也没有具体的资料可以参考,于是果断放弃。
那就换思路吧,不要想着把中文字符转换成jstring再传给java端,直接把char内存传过去在java层转换,一切ok!实现的相关代码:
jni端:
//需要转换的中文字符char buffer[100] = "我们是共产主义接班人!\0";//java层必须有个类,子项为testjfieldID ID = env->GetFieldID (class, "test", "[B");//转换函数void SetBytes2Array (JNIEnv* env, jobject obj, jfieldID id, char * buffer){int len = strlen(buffer);jbyteArray jbArray = env->NewByteArray(len);env->SetByteArrayRegion (jbArray, 0, len, (jbyte *)buffer);env->SetObjectField(obj, id, jbArray);env->DeleteLocalRef(jbArray);}
java端实现转换:
public String BytesToString (byte[] bCon){String str1 = null;try {str1 = new String (bCon, "GBK");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}return str1;}
参考的资料:
[1]Android NDK 下的宽字符编码转换及icu库的使用 http://blog.csdn.net/liujian885/article/details/6536897
[2]JNI学习积累之一 ---- 常用函数大全 http://blog.csdn.net/qinjuning/article/details/7595104
[3]JNI 返回结构体参数 http://dolphin-ygj.iteye.com/blog/519489
0 0
- NDK与java传递中文字符的解决办法
- java与C++中文字符的问题
- java Unicode 与中文字符的转换
- webservice传递特殊字符时的解决办法
- Java与C之间通过JNI传递中文字符乱码解决
- Java与C之间通过JNI传递中文字符乱码解决
- URL中传递中文字符的解决方法
- URL中传递中文字符的解决方法
- url链接传递中文的解决办法
- url链接传递中文的解决办法
- Android Studio NDK 入门教程(2)--Java与C++之间的简单数据转换与传递
- 【JNI】Java与C++中文字串的传递
- 【JNI】Java与C++中文字串的传递
- 地址栏传递中文字符
- URL传递中文解决办法
- jstring字符如何转换成java字符(仅限于java与JNI之间的传递)
- 中文字符乱码的原因及解决办法
- oracle中文字符??乱码的解决办法
- android中的语音识别
- Poi导出excel设置单元格数值格式
- 黑马程序员07_基础加强01
- 阿里巴巴面试题目集合
- 我的java学习日记(3)
- NDK与java传递中文字符的解决办法
- JDK动态代理--Demo
- linux内核锁机制-不可睡眠锁之RCU
- 4.0 编译apk中无classes.dex问题解决方法
- sql之left join、right join、inner join的区别
- json对象创建
- SERC2013 J You Win!
- JBoss下EJB3.x简单环境搭建实例
- 时间复杂度