中文字符串参数传递时的乱码问题??(JNI) 传给c的时候转换成ISO-8859-1编码再传递,c中仍然使用GetStringChars,如何? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String s = new String(yourstring.getBytes("ISO_88591"),"gb2312"); to netkid(我是个程序员?) 不行,仍然乱码,我看应是NLS问题,java中String 为Unicode,而C中为char,单字节,如何进行两者转换,是解决问题的关键。 to peppi(一凡) 是不是这样,我的程序已改成这样:System.out.println("中文字符串问题:");MyTest obj=new MyTest();System.out.println("This is native method!:");String str1=new String("Hello World!您好");String str3="";try{ str3=new String(str1.getBytes("ISO8859_1"),"gb2312");}catch(Exception e){ System.out.println("error"+e);}System.out.println(str3);//java中的中文情况????obj.showParam(str3);运行结果:中文字符串问题:This is native method!:Hello World!??String=[H]在java中打印str3,中文已乱码了,再到C中如何,我想不行吧。 如果你想在程序中传递一个中文,如String s1 = "Hello World!您好";String s2 = s1; //参数传递System.out.println(s2);就能正常输出如果你想在网络应用中传递,那么就用我的方法,如:String s1 = request.getParameter("yourattribute"); //属性里的信息 //是Hello World!您好String s2 = new String(s1.getBytes("ISO8859_1"),"GB2312");System.out.println(s2);输出就是"Hello World!您好"不知道哪种是你想要的结果,你再试试. to peppi(一凡) 感谢你的帮助,但这些都不是我想要的,你说的是JSP中的中文问题,而我说的是通过JNI(Java Native Interface)方法,实现java语言对本地动态链接库资源的调用,用JNI传递中文字符串的问题(在java字符串到C字符串或反向转换的问题),听说有个NLS什么的,可解决这个问题,但没有找到。 老兄你在java里先把string型转成byte型再传到jni中然后再用用看,应该就没什么问题了啊祝你好运! String s = new String(yourstring.getBytes("ISO_88591"),"gb2312"); const jchar *str=(*env)->GetStringChars(env,s,0); char *astr = new char[(*env)->GetStringLength(env,s)+1]; for(int i=0;i<(*env)->GetStringLength(env,s);i++) astr[i] = str[i]; astr[(*env)->GetStringLength(env,s)] = 0; printf("String=[%s]\n",astr); (*env)->ReleaseStringChars(env,s,str);本人测试已经通过,如有问题我可以把整个发一遍. JTabbedPane如何实现这种界面? tomcat error 笔试题 ~新手的简单Q,谢谢指教~ NIO 管道 为什么从第二个管道开始,能够读取到这么多个字节,可是读取到的字节却全为空? 在java里谁用过corba? 为什么服务器上的图片内容改变,文件名不变,客户端(applet)怎么刷新都没变化,请高手帮忙解决啊!!! 为什么非静态变量不能用在静态方法上?什么意思? 哪能找到下载java API?? 有没有人愿意加入开源项目db-unifier String strtest = "abcdefg";请问strtest是对象还是变量? 方法也是对象,对吗?
不行,仍然乱码,我看应是NLS问题,java中String 为Unicode,而C中为char,单字节,如何进行两者转换,是解决问题的关键。
是不是这样,我的程序已改成这样:System.out.println("中文字符串问题:");
MyTest obj=new MyTest();
System.out.println("This is native method!:");
String str1=new String("Hello World!您好");
String str3="";
try
{
str3=new String(str1.getBytes("ISO8859_1"),"gb2312");
}
catch(Exception e)
{
System.out.println("error"+e);
}
System.out.println(str3);//java中的中文情况????
obj.showParam(str3);运行结果:
中文字符串问题:
This is native method!:
Hello World!??
String=[H]在java中打印str3,中文已乱码了,再到C中如何,我想不行吧。
String s1 = "Hello World!您好";
String s2 = s1; //参数传递
System.out.println(s2);
就能正常输出
如果你想在网络应用中传递,那么就用我的方法,如:
String s1 = request.getParameter("yourattribute"); //属性里的信息
//是Hello World!您好
String s2 = new String(s1.getBytes("ISO8859_1"),"GB2312");
System.out.println(s2);
输出就是"Hello World!您好"
不知道哪种是你想要的结果,你再试试.
感谢你的帮助,但这些都不是我想要的,你说的是JSP中的中文问题,而我说的是通过JNI(Java Native Interface)方法,实现java语言对本地动态链接库资源的调用,用JNI传递中文字符串的问题(在java字符串到C字符串或反向转换的问题),听说有个NLS什么的,可解决这个问题,但没有找到。
应该就没什么问题了啊祝你好运!
const jchar *str=(*env)->GetStringChars(env,s,0);
char *astr = new char[(*env)->GetStringLength(env,s)+1];
for(int i=0;i<(*env)->GetStringLength(env,s);i++)
astr[i] = str[i];
astr[(*env)->GetStringLength(env,s)] = 0;
printf("String=[%s]\n",astr);
(*env)->ReleaseStringChars(env,s,str);
本人测试已经通过,如有问题我可以把整个发一遍.