JNI的中文支持是0,你必须将String转称byte[]再转回来。没有捷径……

解决方案 »

  1.   

    是的,要将String先.getBytes(String encoding)转成byte[]数组,c然后根据得到的byte[]数组在构造回来。
      

  2.   

    不能给你完整的源代码。看这些片断吧:JNIEXPORT void JNICALL Java_CtgDll_jniClassify
    (JNIEnv *env, jobject obj, jbyteArray jarrayFileName) 
    {
    jsize len;
    len = env->GetArrayLength(jarrayFileName);
    jbyte *fileName;
    fileName = (jbyte *) malloc(sizeof(jbyte)*(len+1));
    if ( fileName!= NULL) {
    env->GetByteArrayRegion(jarrayFileName, 0, len, fileName);
    fileName[len] = '\0';
    cout << "fileName: " << fileName << endl;
    }那么现在你可以直接用fileName了。
      

  3.   

    这是Java端传递参数的方法:
    public native void jniClassify(byte [] fileName);
      

  4.   

    再补充一句,fileName变量用char *转换类型就可以了。(char *)fileName
      

  5.   

    在Jni.h中有Java String 到C char[] 的转换方法。也有从C 中返回参数的方法 C中不时return char*就可以的。要用jni.h中提供的方法!