android jni 中文乱码

事情的起因:下面这个在java中调用就返回乱码了。


jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "你好");
}

下面这个在java中调用没有问题,返回的是hello world


jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "hello world!");
}

1.首先我们还是先设置Eclipse的全局字符集编码(防止乱码的杀手锏)

Window->Preferences->General->Workspace

见如图所示:

2.那个问题的解决方案:

2.1把jni里用到的.c文件或者.cpp文件要改成utf-8的文件类型,可以用记事本打开,另存为的时候就知道编码了。

2.2:把文字转换成 jbyteArray形式返回到java层,再用String result = new String(byte[],”Utf-8″);来转换。C++类似下面的代码。

jbyteArray Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
char * result = “你好”;
jbyte *by = (jbyte*)result;
jbyteArray jarray = env->NewByteArray(strlen(result));
env->SetByteArrayRegion(jarray,0,strlen(result),by);
return jarray;
}

Tags:

152

2 Responses to android jni 中文乱码

  1. 就是哈哈说道:

    只有更新速度够快,俺们这些粉丝才能更忠实!

  2. 笑话据点说道:

    多更新,要不然还以为您老人家去保卫钓鱼岛了呢

Leave a Reply

Name and Email Address are required fields.
Your email will not be published or shared with third parties.