android java 乱码怎么解决,android jni 中文乱码,该怎么解决

这篇博客探讨了在Android JNI中遇到的中文乱码问题。当从JNI返回包含中文的字符串时,Java层接收到的是乱码。解决方案包括确保C/C++端将字符串转换为UTF-8编码。文中提到了`ucnv_convert`函数,但指出它在Android环境下可能不适用,建议尝试使用GBK解码。同时,博客提供了利用Android系统库libicuuc.so进行转换的示例代码。
摘要由CSDN通过智能技术生成

android 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

分享到:

------解决方案--------------------

String str="XXXX";

str=new String(str.getBytes(), "UTF-8");

------解决方案--------------------

java层:输出中文:new String(str.getBytes(), "UTF-8"); str为jni返回的字符串

c/c++:MultiByteToWideChar 好像是这个函数 可以去查一查

------解决方案--------------------

引用:

java层:输出中文:new String(str.getBytes(), "UTF-8"); str为jni返回的字符串

c/c++:MultiByteToWideChar 好像是这个函数 可以去查一查

MultiByteToWideChar 这是windows API

Android 是linux内核不适用

------解决方案--------------------

换用gbk解码看看。。

------解决方案--------------------

你如果是直接在.c文件写中文的话 你保存成utf-8就可以了

如果要转的话用这个代码 我一直在用的

void (*ucnv_convert)(const char *,const char *, char * , int32_t , const char *, int32_t,int32_t*)=0;

int dllOpencuuc()

{

void* pDL = dlopen("/system/lib/libicuuc.so", RTLD_LAZY);

ucnv_convert = (void (*)(const char *, const char *, char * , int32_t , const char *, int32_t,int32_t*))dlsym(pDL, "ucnv_convert_44");//ucnv_convert_44(2.3) ucnv_convert_4_2(2.2)

if(pDL)

{

dlclose(pDL);

}

NdkDemo代码已上传至Github

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值