通过使用JNI改变的char *编码类型 [英] change char* encoding type by using jni

查看:221
本文介绍了通过使用JNI改变的char *编码类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我通过使用JNI改变的char *编码。
是不是code?请检查。

I'm changing char* encoding by using jni. is it right code? please check.

JNIcommunicator.cpp

JNIcommunicator.cpp

const char *JNICommunicator::changeStringToUTF8(const char* str)
{
     JniMethodInfo t;
    JniHelper::getStaticMethodInfo(t, JNIPakageName, "changeStringToUTF8", "([B)Ljava/lang/String;");
    jbyteArray arr = (t.env)->NewByteArray(strlen(str));
    (t.env)->SetByteArrayRegion(arr,0,strlen(str), (const jbyte*)str);
    jsize arrSize = t.env->GetArrayLength(arr);
    jbyte *pbyte = (t.env)->GetByteArrayElements(arr, 0);
    jstring returnValue = (jstring)t.env->CallStaticObjectMethod(t.classID,t.methodID,str);
    // Release
    t.env->DeleteLocalRef(t.classID);
    t.env->ReleaseByteArrayElements(arr, pbyte, 0);
    return t.env->GetStringUTFChars(returnValue,0);
}

JNICommunicator.java

JNICommunicator.java

public static String changeStringToUTF8(byte[] arr) throws Exception
{
    //CharBuffer cbuffer = CharBuffer.wrap((new String(str.getBytes(), "EUC-KR")).toCharArray());
    //Charset utf8charset = Charset.forName("UTF-8");
    //ByteBuffer bbuffer = utf8charset.encode(cbuffer);

    //encoded UTF-8 string
    //String tmpDecode = new String(bbuffer.array());
    //return tmpDecode;
    String ascii = new String(arr, "EUC-KR");
    byte[] utf = ascii.getBytes("UTF-8");
    String ret = new String(utf, "UTF-8");

    return ret;
}

有人说,如果我送字符串到Java,它的编码会改变UTF-8所以它的内容将被坠毁。所以我送字节数组

someone said if I send String to java, its encoding will change utf-8 so its contents will be crashed. so I send byte array

推荐答案

啊!得到它了。它的问题是错误的参数。

Ah! got it. its problem is wrong parameter..

JNICommunicator.cpp

JNICommunicator.cpp

const char *JNICommunicator::changeStringToUTF8(const char* str)
{
     JniMethodInfo t;
    JniHelper::getStaticMethodInfo(t, JNIPakageName, "changeStringToUTF8", "([B)Ljava/lang/String;");
    jbyteArray arr = (t.env)->NewByteArray(strlen(str));
    (t.env)->SetByteArrayRegion(arr,0,strlen(str), (const jbyte*)str);
    jsize arrSize = t.env->GetArrayLength(arr);
    jbyte *pbyte = (t.env)->GetByteArrayElements(arr, 0);
    jstring returnValue = (jstring)t.env->CallStaticObjectMethod(t.classID,t.methodID,arr);
    // Release
    t.env->DeleteLocalRef(t.classID);
    t.env->ReleaseByteArrayElements(arr, pbyte, 0);
    return t.env->GetStringUTFChars(returnValue,0);
}

JNICommunicator.java

JNICommunicator.java

public static String changeStringToUTF8(byte[] arr) throws Exception
{
    String ansi = new String(arr, "EUC-KR");
    byte[] utf = ansi.getBytes("UTF-8");
    String ret = new String(utf, "UTF-8");
    return ret;
}

我送CallStaticObjectMethod的参数str中,没有编曲。这是不对的。(

I sent CallStaticObjectMethod's parameter str, not arr. it was wrong.:(

我希望这将帮助其他人!

I hope it will help anybody!

这篇关于通过使用JNI改变的char *编码类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆