在从JAVA类方法传递中文信息到DLL的时候,C中用GetStringUTFChars只能取得utf-8格式的内容形成乱码,解决办法:构造一个函数jstringToWindows(),实现取得jstring的内容
char* jstringToWindows(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;
}
// 声明变量
const char* pkeyPath;
char* pmsg; //require to switch
// 取jstring传递的值
pkeyPath=env->GetStringUTFChars(keyPath,0);
pmsg=jstringToWindows(env,msg);
// 引用值
rc = CheckInfoFromBank( (char*)pkeyPath, pmsg);
char* jstringToWindows(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;
}
// 声明变量
const char* pkeyPath;
char* pmsg; //require to switch
// 取jstring传递的值
pkeyPath=env->GetStringUTFChars(keyPath,0);
pmsg=jstringToWindows(env,msg);
// 引用值
rc = CheckInfoFromBank( (char*)pkeyPath, pmsg);
解决方案 »
- 关于hibernate中出现 String index out of range: -1 求大神
- 关于hibernate项目中,把不用的表删除的问题
- 经典程序
- <struts>没有进入Action相应的方法
- Spring框架调用Web Service冒错什么原因?
- 如何在JDBC-ODBC中保证插入的字符不是乱码
- Eclipse+Lomboz+tomcat 配置问题..请帮帮我
- struts-config的问题
- 关于jboss对数据库操作的疑问
- 有谁可以提供给我一份关于xerces的xml解析器的所有函数帮助文档,为什么我在它的网站xml.apache.org没有找到它的1.4.1的文档。还有关于sax2.0的文档也没找到。谢谢!
- 乱码问题,急!!
- 请高手推荐几个struts入门的站点,最好有例子的
deploytool生成的xml文件都是encoding="GBK"
怎么让他默认成encoding="utf-8"?
pkeyPath=env->GetStringUTFChars(keyPath,0);
pmsg=jstringToWindows(env,msg);而不是后面的东西RC,取一个值罗。SIGH。