1.在Java中定义一个方法传入一个String参数,并定义获取方法
public native String chineseChars(String in);
2.javah生成头文件
/*
* Class: com_boom_JNITest
* Method: chineseChars
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_boom_JNITest_chineseChars
(JNIEnv *, jobject, jstring);
3.源文件中实现具体
//中文问题
JNIEXPORT jstring JNICALL Java_com_boom_JNITest_chineseChars
(JNIEnv *env, jobject jobj, jstring in){
//输出
//char *c_str = (*env)->GetStringUTFChars(env,in,NULL);
//printf("%s\n",c_str);
//c->jstring
char *c_str = "马蓉与宋江";
//char c_str[] = "马蓉与宋江";
//jstring jstr = (*env)->NewStringUTF(env,c_str);
//执行String(byte bytes[],String charestName)构造方法需要的条件
//1.jmethodID
//2.byte数组
//3.字符编码 jstring
jclass str_cls = (*env)->FindClass(env, "java/lang/String");
jmethodID constaructor_mid = (*env)->GetMethodID(env,str_cls,"<init>","([BLjava/lang/String;)V");
//jbyte ->char
//jbyteArray ->char[]
jbyteArray bytes = (*env)->NewByteArray(env,strlen(c_str));
//byte 数组赋值
//0 -> strlen(c_str) 从头到尾
//对等于,从c_str这个字符数组,复制到bytes这个字符数组
(*env)->SetByteArrayRegion(env,bytes,0,strlen(c_str),c_str);
//字符编码jstring
jstring charsetName = (*env)->NewStringUTF(env,"GB2312");
//调用构造函数,返回编码之后的jstring
return (*env)->NewObject(env,str_cls,constaructor_mid,bytes,charsetName);
}