下面这个在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
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
{
static
{
System.loadLibrary("Test");
}
public static native String getString();
public static void main(String[] args)
{
System.out.println(getString());
}
}
Test.h/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Test */#ifndef _Included_Test
#define _Included_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Test
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_Test_getString
(JNIEnv *, jclass);#ifdef __cplusplus
}
#endif
#endif
Test.c#include <windows.h>
#include "Test.h"/*
* Class: Test
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_Test_getString
(JNIEnv * env, jclass cl)
{
byte * bytes = "你好";
jchar jchars[1024]; MultiByteToWideChar(CP_ACP, 0, bytes, -1, jchars, 1024);
return (*env)->NewString(env, jchars, lstrlen(jchars));
}