http://blog.sina.com.cn/s/blog_643e8386010106jp.html
Java中文乱码问题
Java中文乱码问题在很多情况下都可能发生:不同应用间,不同平台间都可能会产生中文乱码问题。
1.为什么会出现乱码?
首先在此说明一下Java->Jni->C++,C++->Jni->Java乱码的原因:
在Java内部是用16bit的unicode编码(UTF-16)来表示字符串的,无论英文还是中文都是两个字节的长度;
Jni内部是使用UTF-8来表示字符串的,而UTF-8是变长的unicode,ascii字符是一个字节,中文是三个字节;而在C++中,ascii用一个字节表示,中文用两个字节来表示。在我们编写程序时,出现中文而又没有做出字符转换的话,就会出现了乱码。
2.针对乱码解决对策?
在我们采用默认的编码环境下,中文编码环境默认的为GBK。在Eclipse中,我们可以通过如下代码获取编码方式:System.out.println(System.getProperty("file.encoding"));
1)首先要修改工程的编码方式为UTF-8。(Eclipse右键->Properties->Resource)。
2)其次将java中的String传递到Jni中的jstring,在JNI中通过GetStringUTFChars()方法将jstring转换成指针类型的char就可以啦,在c++中应用这个含有中文的char就不会出现乱码的情况了。
同理:C++->Jni->Java采用同样的处理方式就可以了