JNI之c/c++返回中文给java 乱码问题以及java数组在c排序
来源:互联网 发布:mac pscc2015安装教程 编辑:程序博客网 时间:2024/06/15 01:34
c/c++返回中文给java时会乱码,因为java和c/c++的编码格式不一样,java的utf-16,c/c++是utf-8,所以在返回中文字符的时候,包装成gb2312返回。
具体见如下博客链接:
jni交互中文乱问题分析
public class CodeTest { public native String getChineseFromNative(); public static void main(String[] args) { // TODO Auto-generated method stub CodeTest t=new CodeTest(); String result=t.getChineseFromNative(); System.out.println("test=china_code="+result); } static { System.load("D:\\Documents\\Visual Studio 2013\\Projects\\" + "JNIChinaCode\\x64\\Debug\\JNIChinaCode.dll"); }}
#define CRT_SECURE_WARNNING#include "code_test_CodeTest.h"#include <string.h>JNIEXPORT jstring JNICALL Java_code_1test_CodeTest_getChineseFromNative(JNIEnv *Env, jobject jobj){ //c返回中文字符getJava char *c_str = "中华人民共和国"; jstring result=(*Env)->NewStringUTF(Env,c_str); jclass str_class = (*Env)->FindClass(Env, "Ljava/lang/String;");//后面分号 jmethodID constr_mid=(*Env)->GetMethodID(Env,str_class,"<init>","([BLjava/lang/String;)V"); //通过构造函数创建 String 对象,传入byte 和UTF-8 string=new String(byte[] "gb2312"); jbyteArray str_byte=(*Env)->NewByteArray(Env,strlen(c_str)); (*Env)->SetByteArrayRegion(Env,str_byte,0,strlen(c_str),c_str); jstring utf_set=(*Env)->NewStringUTF(Env,"GB2312");//c/c++传入中文编码成gb2312 return (*Env)->NewObject(Env, str_class, constr_mid, str_byte, utf_set);};//运行效果如下图
int compareOrder(int *a, int *b){ return (*a) - (*b);}//c排序java数组JNIEXPORT void JNICALL Java_code_1test_CodeTest_rightOrder(JNIEnv *Env, jobject jobj, jintArray jarry){ //获取数组指针 jint *arryp= (*Env)->GetIntArrayElements(Env,jarry,NULL); //获取数组长度 jsize size = (*Env)->GetArrayLength(Env,jarry); printf("test=length:%d\n",size); //数组排序 qsort(arryp,size,sizeof(jint),compareOrder); (*Env)->ReleaseIntArrayElements(Env,jarry,arryp,JNI_COMMIT);};
java代码和效果图如下
阅读全文
0 0
- JNI之c/c++返回中文给java 乱码问题以及java数组在c排序
- Ndk学习之JNI中文问题(java-->C-->Java)
- android JNI C代码中文返回乱码
- JNI之c调用java的函数,调用java的构造生成对象,得到java的成员,以及C返回Java字符串乱码
- JNI笔记 C访问Java构造方法,父类方法,中文乱码,C向Java中传入数组
- Android JNI 把Java数组传递给C
- Java与C之间通过JNI传递中文字符串及乱码问题
- jni和C 中文乱码
- Ndk学习之JNI获取数组(Java-->C-->Java)
- JAVA与C++::关于JNI中文字符串操作问题总结
- JAVA与C++::关于JNI中文字符串操作问题总结
- JNI--在C/C++中使用java数组
- Ndk学习之JNI传入数组(java-->C)
- JNI中C和java传递数组
- JNI C创建Java字符串数组
- jni数组使用及将C的char数组传递给Java
- 在java和c之间进行数据传递 之 JNI
- Java与C之间通过JNI传递中文字符乱码解决
- VS中利用scanf函数读取字符串
- 支付宝圣诞红包1225怎么领 支付宝圣诞红包在哪
- python模拟按键+javasocket实现简单的课堂演示翻页笔
- JS获取当前页面名称
- javascript的学习
- JNI之c/c++返回中文给java 乱码问题以及java数组在c排序
- 服务端和客户端连接的两种方式,socket和DatagramSocket
- 存储管理之页式、段式、段页式存储
- 微服务架构的分布式事务解决方案
- Codeforces Round #334 (Div. 2) D(数论 循环节)
- modprobe和insmod的区别
- 在 2018 年来临之际,你应该知道的 Vue.js 的 11 个组件库
- FFMPEG中的内存读取
- VS中引用外部函数