大概因为开发环境是英文的缘故吧,做了这么久时间的SWT-Extension,直到今天才发现存取中文都是乱码。不过显而易见的是Test Case做得太少了,毕竟是自己的开源项目,在上面投入的是兴趣,而不是精力。虽然一直在弄,但动辄就几个月没有commit,而且到现在也没有一个正式版发布。本来可以积累一点user的,现在估计也都跑光了。
下面这段代码用于JNI中jstring和Window char之间转换:
char* jstringToNative( JNIEnv *env, jstring jstr )
{
int length = env->GetStringLength(jstr );
const jchar* jcstr = env->GetStringChars(jstr, 0 );
char* rtn = (char*)malloc( length*2+1 );
int size = 0;
size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,(length*2+1), NULL, NULL );
if( size <= 0 )return NULL;
env->ReleaseStringChars(jstr, jcstr );
rtn[size] = 0;
return rtn;
}
jstring nativeTojstring( JNIEnv* env, char* str )
{
jstring rtn = 0;
int slen = strlen(str);
unsigned short * buffer = 0;
if( slen == 0 )
rtn = env->NewStringUTF( str );
else
{
int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );
buffer = (unsigned short *)malloc( length*2 + 1 );
if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 )
rtn = env->NewString( (jchar*)buffer, length );
}
if( buffer )
free( buffer );
return rtn;
}
JNI 用起来实在太麻烦了,比我做Java开发效率实在低得太多,各种各样的类型转换,我头都晕了…… 另外JNI好像是SUN中国研究院搞的,怎么就没有提供一个好的中文解决方案?
Eclipse SWT Extension snapshot: