Chinaunix

标题: 一个关于JNI中的java环境与native环境的中文字符转换的问题 [打印本页]

作者: xuchui    时间: 2004-06-09 15:50
标题: 一个关于JNI中的java环境与native环境的中文字符转换的问题
最近要做一个程序需要使用JNI(LINUX/AIX下),现在程序已经作完,但是因为要操作中文字符,所以需要写2个函数,一个将jstring的中文转到char,一个将char转成jstring。参考了一些文档现在jstringtochar的函数已经搞定。但是chartojstring的函数一直没有搞定,C程序编译通过的过,但是一运行就报We are unable to locate the function name symbol for the error
just occurred. Please refer to release documentation for possible
reason and solutions.
具体的代码如下:
#define CURRENT_ENCODE "GBK"
jstring CharTojstring(JNIEnv* env, char* str)
{
       jstring rtn = 0;
       jsize len = strlen(str);
       jclass clsstring = (*env)->;FindClass(env,"java/lang/String";

       //new encode string default "GBK"
       jstring strencode = (*env)->;NewStringUTF(env,CURRENT_ENCODE);

       jmethodID mid = (*env)->;GetMethodID(env,clsstring, "", "([BLjava/lang/StringV";

       jbyteArray barr = (*env)->;NewByteArray(env,len);

       //API Ref :SetByteArrayRegion(JNIEnv *env, jbyteArray array, jsize startelement, jsize length, jbyte *buffer)

       (*env)->;SetByteArrayRegion(env,barr,0,len,(jbyte *)str);

       //call new String(byte[] b,String encode)
       rtn = (jstring)(*env)->;NewObject(env,clsstring,mid,barr,strencode);

       return rtn;
}
通过打印字符的方法,到(*env)->;SetByteArrayRegion(env,barr,0,len,(jbyte *)str);这句停掉,所以我觉得问题应该出在(*env)->;SetByteArrayRegion(env,barr,0,len,(jbyte *)str);这句上面。
但是我看了一个文档上的sample,里面也有关于SetByteArrayRegion的使用。在系统上是可以用的,所以应该不是SetByteArrayRegion函数的问题。我觉得可能是参数的引用上的问题。但是具体情况不明,希望对JNI比较熟悉的高手来帮小弟一把,万分感谢。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2