传给c的时候转换成ISO-8859-1编码再传递,c中仍然使用GetStringChars,如何?

解决方案 »

  1.   

    String s = new String(yourstring.getBytes("ISO_88591"),"gb2312");
      

  2.   

    to netkid(我是个程序员?) 
    不行,仍然乱码,我看应是NLS问题,java中String 为Unicode,而C中为char,单字节,如何进行两者转换,是解决问题的关键。
      

  3.   

    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中如何,我想不行吧。
      

  4.   

    如果你想在程序中传递一个中文,如
    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!您好"
    不知道哪种是你想要的结果,你再试试.
      

  5.   

    to peppi(一凡) 
    感谢你的帮助,但这些都不是我想要的,你说的是JSP中的中文问题,而我说的是通过JNI(Java Native Interface)方法,实现java语言对本地动态链接库资源的调用,用JNI传递中文字符串的问题(在java字符串到C字符串或反向转换的问题),听说有个NLS什么的,可解决这个问题,但没有找到。
      

  6.   

    老兄你在java里先把string型转成byte型再传到jni中然后再用用看,
    应该就没什么问题了啊祝你好运!
      

  7.   

    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);
    本人测试已经通过,如有问题我可以把整个发一遍.