美文网首页
android jni 中文乱码,该怎么解决

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

作者: 程序员学园 | 来源:发表于2017-07-12 11:23 被阅读0次

    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

    如有不正支出,欢迎留言交流!
    我的GitHub
    我的CSDN
    我的简书
    开发笔记

    相关文章

      网友评论

          本文标题:android jni 中文乱码,该怎么解决

          本文链接:https://www.haomeiwen.com/subject/cefbhxtx.html