通过使用JNI改变的char *编码类型 [英] change char* encoding type by using jni
本文介绍了通过使用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屋!
查看全文