2015-02-07 33 views
-2

我使用jni更改了char *編碼。 它是正確的代碼?請檢查。使用jni更改char *編碼類型

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

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所以它的內容將被墜毀。所以我發送字節數組

回答

0

啊!得到它了。它的問題是錯誤的參數..

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

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的參數海峽,不編曲。這是錯誤的:(

我希望它會幫助任何人!