快速业务通道

JNI中文处理问题小结 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
n] = 0;   return strlen(desc); }  当然,按照上面的分析,你也可以直接将GetStringChars的返回结果作为wchar_t串来进行操作。或者,如果你愿意,你也可以将GetStringUTFChars的结果通过MultiByteToWideChar转换为UCS2编码串,再通过WideCharToMultiByte转换为多字节串。const char* pstr = env->GetStringUTFChars(str, false); int nLen = MultiByteToWideChar( CP_UTF8, 0, pstr, -1, NULL, NULL );//得到UTF-8编码的字符串长度 LPWSTR lpwsz = new WCHAR[nLen]; MultiByteToWideChar( CP_UTF8, 0, pstr, -1, lpwsz, nLen );//转换的结果是UCS2格式的编码串 int nLen1 = WideCharToMultiByte( CP_ACP, 0, lpwsz, nLen, NULL, NULL, NULL, NULL ); LPSTR lpsz = new CHAR[nLen1]; WideCharToMultiByte( CP_ACP, 0, lpwsz, nLen, lpsz, nLen1, NULL, NULL );//将UCS2格式的编码串转换为多字节 cout << "Out:" << lpsz << endl; delete [] lpwsz; delete [] lpsz;

JNI中文处理问题小结(3)

时间:2010-05-13 大卫的思维空间

当然,我相信很少有人想要或者需要这么做。这里需要注意一点,GetStringChars的返回值是jchar,而GetStringUTFChars的返回值是const char*。除了上面的办法外,当需要经常在jstring和char*之间进行转换时我们还有一个选择,那就是下面的这个类。这个类本来是一个叫Roger S. Reynolds的老外提供的,想法非常棒,但用起来却不太灵光,因为作者将考虑的重心放在UTF格式串上,但在实际操作中,我们往往使用的却是ACP(ANSI code page)串。下面是原作者的程序:class UTFString { private:   UTFString (); // Default ctor - disallowed public:   // Create a new instance from the specified jstring   UTFString(JNIEnv* env, const jstring& str) :     mEnv (env),     mJstr (str),     mUtfChars ((char* )mEnv->GetStringUTFChars (mJstr, 0)),     mString (mUtfChars) { }   // Create a new instance from the specified string   UTFString(JNIEnv* env, const string& str) :     mEnv (env),     mString (str),     mJstr (env->NewStringUTF (str.c_str ())),     mUtfChars ((char* )mEnv->GetStringUTFChars (mJstr, 0)) { }   // Create a new instance as a copy of the specified UTFString   UTFString(const UTFString& rhs) :     mEnv (rhs.mEnv),     mJstr (mEnv->NewStringUTF (rhs.mUtfChars)),     mUtfChars ((char* )mEnv->GetStringUTFChars (mJstr, 0)),     mString (mUtfChars) { }   // Delete the instance and release allocated storage   ~UTFString() { mEnv->ReleaseStringUTFChars (mJstr, mUtfChars); }   // assign a new value to this instance from the given string   UTFString & operator =(const string& rhs) {     mEnv->ReleaseStringUTFChars (mJstr, mUtfChars);     mJstr = mEnv->NewStringUTF (rhs.c_str ());     mUtfChars = (char* )mEnv->GetStringUTFChars (mJstr, 0);     mString = mUtfChars;     return *this;   }   // assign a new value to this instance from the given char*   UTFString & operator =(const char* ptr) {     mEnv->ReleaseStringUTFChars (mJstr, mUtfChars);     mJstr = mEnv->NewStringUTF (ptr);     mUtfChars = (char* )mEnv->GetStringUTFChars (mJstr, 0);    

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号