最近在Linux上写了一个测试程序。
先是用pure Java——String stemp=new String("文件";
byte[] sarray=stemp.getBytes();
然后通过打印可以看见"文件"这个String在Java中的编码是CEC4,BCFE
然后我用C—— char stemp[10];
strcpy(stemp,"文件";
然后通过打印可以看见"文件"这个String在C中的编码也是CE,C4,BC,FE
但是我又写了一个JNI的小东西。Java的接口是一个native void test(String temp);
C的实现是:JNIEXPORT void JNICALL Java_t_test(JNIEnv *env,jstring temp)
{
……
jboolean iscopy;
const char* str=(*env)->GetStringUTFChars(env, temp, &iscopy);
……
};
结果发现:如果我用GetStringUTFChars()的时候,把"文件"传过去就成了E6,96,87,E4,BB,B6
改用GetStringChars()的时候,把"文件"传过去就成了87,65,F6,4E.
而如果不传中文,传ASCII字符的时候一切正常……
郁闷哪……这是怎么回事啊?谁能指点一下吗?