jni 开发 char*转换成jstring

来源:互联网 发布:云计算安全体系架构 编辑:程序博客网 时间:2024/04/28 07:42
jstring Java_com_example_test_MainActivity_stringFromJNI(JNIEnv* env,jobject thiz) {char *cstr = "马上有钱,哈哈";//定义java String类 strClassjclass strClass = (*env)->FindClass(env,"java/lang/String");//获取java String类方法String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新StringjmethodID ctorID = (*env)->GetMethodID(env,strClass, "<init>", "([BLjava/lang/String;)V");//建立byte数组jbyteArray bytes = (*env)->NewByteArray(env,strlen(cstr));//将char* 转换为byte数组(*env)->SetByteArrayRegion(env,bytes, 0, strlen(cstr), (jbyte*)cstr);// 设置String, 保存语言类型,用于byte数组转换至String时的参数jstring encoding = (*env)->NewStringUTF(env,"GB2312");//将byte数组转换为java String,并输出return (jstring)(*env)->NewObject(env,strClass, ctorID, bytes, encoding);}

===============================================================================================

java 默认的编码格式 为UTF-8; String defaultCharsetName=Charset.defaultCharset().displayName();   可以获取;


最近发现 :android -----windows => preference => Genenral => workspace => Test file encoding => 此可以选择编码格式;

如果此时设置UTF-8,那么 jstring encoding =(*env)-> NewStringUTF(env,"GB2312");就应该改为"UTF-8";

char* cstr = "马上有钱,哈哈"; 中文内容重新输入,返回给java时就不会乱码;


如果是GBK,  那么 jstring encoding =(*env)-> NewStringUTF(env,"GB2312");就不用改了;

char* cstr = "马上有钱,哈哈"; 中文内容重新输入,返回给java时也不会乱码;


0 0
原创粉丝点击