java jni 中文乱码
下面这个在java中调用就返回乱码了。
JNIEXPORT jstring JNICALL Java_com_example_nativeaudio_NativeAudio_readFromAssets(JNIEnv* env)
{
return env->NewStringUTF("你好");
}
下面这个在java中调用没有问题,返回的是hello world
JNIEXPORT jstring JNICALL Java_com_example_nativeaudio_NativeAudio_readFromAssets(JNIEnv* env)
{
return env->NewStringUTF("hello world");
}
网上查了下解决方案是:jni返回给java的字符串,c/c++首先应该负责把这个字符串变成UTF-8或者UTF-16格式
想问下有什么函数可以把字符串转换成UTF-8
------解决方案--------------------
NewStringUTF返回的是改良的UTF-8字符串,不是标准的UTF-8,用String.getBytes()好像不行
我一般传字符串都是用NewString函数来传的,NewString传的是UTF-16的字符串,和java内部的字符串编码一致
NewString函数的参数为jstring NewString(JNIEnv * env, const jchar chars[], jsize length);
jchar是宽字符,用的也是UTF-16编码,不能直接进行赋值,要靠调用操作系统的API来实现
例如Windows下面,将字符串转化为UTF-16的函数是MultiByteToWideChar
最后给你一个jni使用C语言在windows下返回“你好”的例子
Test.java
Java code
public class Test
{
static
{
System.loadLibrary("Test");
}
public static native String getString();
public static void main(String[] args)
{
System.out.println(getString());
}
}