linux下JNI给JAVA传递中文的问题

dic_walter 2007-07-18 05:46:31
我在JNI里面想传递一中文字符串给JAVA,但JAVA里面显示出来是乱码。这个问题在windows下面很好处理。但liunx下如何处理呢,急盼答案!!!!!
...全文
431 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
dic_walter 2007-09-05
  • 打赏
  • 举报
回复
lovejklife
----------------------
分全部都给你了!!!
wangfengyun521 2007-08-10
  • 打赏
  • 举报
回复
这么好的帖子,顶了!!!


有奖活动,送银饰了~``大家快来看

斑马网软件论坛做活动送银饰啊。不要钱滴。。大家看去,,我已经准备好去抢。。
活动地址:http://club.banma.com/viewthread.php?tid=32496
dic_walter 2007-08-10
  • 打赏
  • 举报
回复
lovejklife
----------------------
好,没问题。我再想想
lovejklife 2007-08-01
  • 打赏
  • 举报
回复
没有其他人讨论了吗,真的没有其他的方法了吗?

再没人来,你就把分全给我吧,呵呵
dic_walter 2007-07-26
  • 打赏
  • 举报
回复
lovejklife(程序员怎么样才能发财呢??)
-----------------------------------------
非常感谢,我用你的方法成功了。哈哈

我再看看还有没有其它的方法,如果有,在这里发布一下

也请各位再提供一些其它的思路,非常感激
lovejklife 2007-07-26
  • 打赏
  • 举报
回复
jclass m_strClass = (m_env)->FindClass("java/lang/String");
dic_walter 2007-07-25
  • 打赏
  • 举报
回复
wjwaterstone()
------------------------
我试过你给我的方法,但中间有些汉字显示正确,有些显示的是乱码。
dic_walter 2007-07-25
  • 打赏
  • 举报
回复
lovejklife(程序员怎么样才能发财呢??)
--------------------------------------------

请问m_strClass是个什么东东?
java小小兵 2007-07-25
  • 打赏
  • 举报
回复
介个就奇怪唠
难道说传入的String编码不一致?
java小小兵 2007-07-24
  • 打赏
  • 举报
回复
public String convert(String s){
try{
return new String(s.getBytes("ISO-8859-1"),"GB2312");
}catch(Exception e){return null;}
}

试试这个
dic_walter 2007-07-23
  • 打赏
  • 举报
回复
mbstowcs( (wchar_t*)buf, buffer, len )的返回值总是1么?
lovejklife 2007-07-23
  • 打赏
  • 举报
回复
我用的方法是java.lang.string类的构造函数来建立JAVA的string类型
------------------------------
//获取java String类方法String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String
m_strConstructorID = (m_env)->GetMethodID(m_strClass, "<init>", "([BLjava/lang/String;)V");
m_encoding = (m_env)->NewStringUTF("GB2312");
jbyteArray bytes = (m_env)->NewByteArray(strlen(str));//建立byte数组
(m_env)->SetByteArrayRegion(bytes, 0, strlen(str), (jbyte*)str);//将char* 转换为byte数组
return (jstring)(m_env)->NewObject(m_strClass, m_strConstructorID, bytes, m_encoding);//将byte数组转换为java String,并输出

-----------------------------
不知道还有什么好方法
记得告诉我
dic_walter 2007-07-20
  • 打赏
  • 举报
回复
mbstowcs好象办转换了第一个汉字出来?????????
dic_walter 2007-07-20
  • 打赏
  • 举报
回复
自己顶
dic_xiphias 2007-07-20
  • 打赏
  • 举报
回复
帮顶
dic_walter 2007-07-19
  • 打赏
  • 举报
回复
我用过setlocale( "zh_CN.GB2312" ),也是一样的效果
hzcpig 2007-07-19
  • 打赏
  • 举报
回复
setlocale( "zh_CN.GB2312" );
dic_walter 2007-07-19
  • 打赏
  • 举报
回复
JNIEXPORT jstring JNICALL Java_myPackage_myInterface_getErrString
(JNIEnv *env, jclass obj)
{
setlocale( "zh_CN.gbk" );

jstring jstr;
char buffer[256];
GetErrorString( buffer );
strcpy( buffer, "你他是不是" );
//jstr = Char2Jstring( env, buffer );
unsigned short* buf = 0;
int len = MB_CUR_MAX;//mbstowcs( NULL, buffer, strlen( buffer) );
buf = ( unsigned short* )malloc( len*2 + 1 );
if( mbstowcs( (wchar_t*)buf, buffer, len ) > 0 )
jstr = (*env)->NewString( env, (jchar*)buf, len );
if( buf )
free( buf );

return jstr;
}
又努力一把,做出以上代码。
但只显示第一个汉字,真不得了了。晕掉,快来救我啊!!!!
dic_walter 2007-07-19
  • 打赏
  • 举报
回复
哦,补充一下,我要传递的是中文字符
dic_walter 2007-07-19
  • 打赏
  • 举报
回复
/*取得错误信息*/
JNIEXPORT jstring JNICALL Java_SafePackage_common_getErrString
(JNIEnv *env, jclass obj)
{
jstring jstr;
char buffer[256];
GetErrorString( buffer );

jstr = Char2Jstring( env, buffer );
return jstr;
}
这是我的代码,返回类型是jstring
现在的问题返回后,JAVA得到的字符串是乱码的。
现在要做的是Char2Jstring中,如何将char*的转换成jstring类型的才不会出现乱码
加载更多回复(3)

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧