JNI 访问String类型成员变量 怎么"好像有"?出现什么错误你自己你看不到马? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 env->GetStringUTFChars(jstr, 0);取到的是UTF8编码的字符串如果有中文,就会有问题,有些字符被转成"?"我使用GetStringCharsCString cStr = CString(jstringToWindows(env,jstr));/////////////////////////////////////////////////////////////////////////////////辅助函数:char* jstringToWindows(JNIEnv* env,jstring jstr);//功能:将Java的Unicode字符串转化成本地字符数组;///////////////////////////////////////////////////////////////////////////////char* jstringToWindows(JNIEnv* env,jstring jstr ){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); 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 windowsToJstring( JNIEnv* env, char* str )//功能:将本地字符数组转化成Java的Unicode字符串;///////////////////////////////////////////////////////////////////////////////jstring windowsToJstring( JNIEnv* env, char* str ){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); jstring rtn = 0; int slen = strlen(str); wchar_t* buffer = 0; if( slen == 0 ) rtn = env->NewStringUTF(str); //UTF ok since empty string else { int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 ); buffer = (wchar_t*)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;} 类加载器的问题,一小段代码,说找不到类。Eclipse一个class文件只能建一个类吗? java 画图的问题 初学者如何自己编写程序. 有人关注codejam吗??郁闷,题目都看不懂... 帮个忙,给提个醒,谢谢了 哪位高手知道,如何改变jtable中 一指定行的颜色 ? 谁能帮我看一下是为什么?空指针的问题 关于CSSC的解析 使用iText组件不能在表格中显示中文?急急急! 一个JavaMail代码中问题,请教? 一个有私有构造方法的类为什么不可以被extends? 在JTree中的USEROBJECT有什么用处,我一直不理解?
取到的是UTF8编码的字符串
如果有中文,就会有问题,有些字符被转成"?"
我使用GetStringChars
CString cStr = CString(jstringToWindows(env,jstr));///////////////////////////////////////////////////////////////////////////////
//辅助函数:char* jstringToWindows(JNIEnv* env,jstring jstr);
//功能:将Java的Unicode字符串转化成本地字符数组;
///////////////////////////////////////////////////////////////////////////////
char* jstringToWindows(JNIEnv* env,jstring jstr )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
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 windowsToJstring( JNIEnv* env, char* str )
//功能:将本地字符数组转化成Java的Unicode字符串;
///////////////////////////////////////////////////////////////////////////////
jstring windowsToJstring( JNIEnv* env, char* str )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
jstring rtn = 0;
int slen = strlen(str);
wchar_t* buffer = 0;
if( slen == 0 )
rtn = env->NewStringUTF(str); //UTF ok since empty string
else
{
int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );
buffer = (wchar_t*)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;
}