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