Ndk学习之JNI中文问题(java-->C-->Java)

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);

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值