JNI中的字符转换问题
JNI,Java与C++之间进行中文字符转换的问题。
用MultiByteToWideChar和WideCharToMultiByte可以实现。但是这两个函数都需要字符串的长度做参数。在中英文混合的情况下,就不知道怎么处理了。
char * toChars(JNIEnv * env, jstring str)
{
if (!env || !str) return 0;
const jchar * jc = env->GetStringChars(str, 0);
const wchar_t * wc = (wchar_t *) jc;
int s = (int)wcslen(wc);
char * r = new char[2*s+1];
WideCharToMultiByte(CP_ACP, 0, wc, s+1, r, s*2, 0, 0);
r[2*s] = 0;
env->ReleaseStringChars(str, jc);
return r;
}
以上是我写的代码。可以看到新的字符串r它的长度是2*s+1。这只在纯中文时是正确的,中英文混合时,会多出几个字节来,出现一串问号。
类似的问题也出现在char *转换为jstring时,字符串的长度要怎么取才好呢?