jstring Java_com_example_test_MainActivity_stringFromJNI(JNIEnv* env,jobject thiz) {
char *cstr = "马上有钱,哈哈";
//定义java String类 strClass
jclass strClass = (*env)->FindClass(env,"java/lang/String");
//获取java String类方法String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String
jmethodID 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时也不会乱码;