java JNI 传中文参数到c乱码

发布于 2021-11-21 00:15:47 字数 98 浏览 655 评论 2

JNI问题:本人第一次做JNI调用C实现的本地方法 但是发现安装路径为中文时不能正常运行,发现是Java传中文参数到C出现乱码,求大神给点指点,能给一段java到c的编码转换的代码最好了,谢谢了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

疑心病 2021-11-23 09:02:45

谢谢,马上试一下

你曾走过我的故事 2021-11-23 03:16:54

两段代码提供参考:

char * JStringToWindows(JNIEnv * pJNIEnv, jstring jstr)  
{  
    jsize len = pJNIEnv->GetStringLength(jstr);  
    const jchar * jcstr = pJNIEnv->GetStringChars(jstr, NULL);  
    int size = 0;  
    char * str = (char *)malloc(len * 2 + 1);  
    if ((size = WideCharToMultiByte(CP_ACP, 0, LPCWSTR(jcstr), len, str, len * 2 + 1, NULL, NULL)) == 0)  
        return NULL;  
    pJNIEnv->ReleaseStringChars(jstr, jcstr);  
    str[size] = 0;  
    return str;  
}
jstring WindowsTojstring( JNIEnv* env, char* str )  
{  
    jstring rtn = 0;  
    int slen = strlen(str);  
    unsigned short * buffer = 0;  
    if( slen == 0 )  
        rtn = (env)->NewStringUTF(str );   
    else 
    {  
        int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );  
        buffer = (unsigned short *)malloc( length*2 + 1 );  
        if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 )  
            rtn = (env)->NewString(  (jchar*)buffer, length );  
    }  
    if( buffer )  
        free( buffer );  
    return rtn;  
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文