在linux用C编写了一个JNI调用的库,函数返回类型为jstring。我是用jstring result = env->NewStringUTF("测试");生成一个jstring对象,然后返回此对象。我在JAVA中调用此函数,显示返回的值,此时是乱码。怎么才能得到正确的结果呢?修改库程序或者JAVA中编码转换?

解决方案 »

  1.   

    用转码就可以,以下是我全部测试程序:
    //Teststr.java
    public class Teststr
    {
      
      public static native String  cstr();  static
      {
        System.loadLibrary( "Teststr" );
      }
       public static void main( String[] args ) throws Exception
       {
         String p= new String(cstr().getBytes("ISO8859-1"), "GB2312"); // 这里是关键
         System.out.println(p);
       }
    }
    //Teststr.cpp
    #include "Teststr.h"
    JNIEXPORT jstring JNICALL Java_Teststr_cstr(JNIEnv *env, jclass cl)
    {
      jstring result = env->NewStringUTF("测试");
      return result;
    }
    ====================================
    结果:
    测试