java内部使用的是16bit的unicode编码(UTF-16)来表示字符串的,无论中文英文都是2字节;
jni内部是使用UTF-8编码来表示字符串的,UTF-8是变长编码的unicode,一般ascii字符是1字节,中文为3字节;
c/c++使用的是原始数据,ascii就是一个字节,中文一般是GB2312编码,用两个字节来表示一个汉字;
jni返回给java的字符串,c/c++首先应该负责把这个字符串变成UTF-8或者UTF-16格式,然后通过NewStringUTF或者NewString把它封装成jstring,返回给java就可以了。
附上相关链接:
(http://blog.sina.com.cn/s/blog_a000da9d010185hr.html)