亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JAVA與C++::關于JNI中文字符串操作問題總結

2019-11-17 05:28:35
字體:
來源:轉載
供稿:網友

  [問題簡單背景]

使用java編程有時候需要使用JNI來實現效率方面或者是其他方面的問題。在JNI使用中不得不面臨
的問題就是中文問題(假如你是老外,并且不關心中國建設,那就不用看了;或者你已經知道如何解決
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
的話,你也不用看了),JAVA采用UNICODE來支持運行時,當然類文件的保存格式是UTF-8。
~~~~~~~~~~~~~~~~~

當然了你用pure JAVA也不會出現問題的,其他出現的問題也不包含在今天的論題中(比如文件保存的字符集
或者是WEB開發中的中文問題)。當我們需要使用JAVA和本地環境混合編程時候,問題就來了:

(1)JAVA如何傳遞UNICODE字符串到本地環境
(2)本地環境如何傳遞UNICODE字符到JAVA環境

當然了,中國人我只關心中文在之間的轉化,英文很好辦,因為沒有問題的,其他語言偶不關心。

[測試環境說明]

下面說明一下本人使用的環境。
(1)WINDOWS2000 PRofessional/512M DDR RAM/P4 2.0G
(2)SUN JDK1.4.0
(3)VC++ 6.0 /SP5

[測試過程說明]

============================
編寫JAVA程序,得到接口文件
============================
//jni.java

public class jni
{
static
{
System.loadLibrary("jni");
}

public native String getChinese(String str);

public static void main(String args[])
{
jni j=new jni();
System.err.println("[從NATIVE環境返回字符]"+j.getChinese("測"));

char ch='測';
System.err.println("[在JAVA環境中]'測'的UNICODE="+(int)ch);
}
}

編譯JAVA程序
%JAVA_HOME%/bin/javac jni.java

得到接口文件
%JAVA_HOME%/bin/javah jni

//jni.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jni */
#ifndef _Included_jni
#define _Included_jni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: jni
* Method: getChinese
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_jni_getChinese
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif

============================
編寫本地實現
============================
具體怎么寫DLL等,我看我就不用講了,所以我只是簡單
摘寫相關的代碼。

//#include "jni.h"
JNIEXPORT jstring JNICALL Java_jni_getChinese
(JNIEnv *env, jobject obj, jstring s)
{
jchar * newstring;
jstring ret=0;
/*
//-- 測試第三部分 --
newstring=new jchar[1];
newstring[0]=27979;//中文'測'的unicode
ret=env->NewString(newstring,1);
delete []newstring;
*/

//-- 測試第一部分 --
wchar_t* p=L"測";
printf("/n[在NATIVE環境中]'測'的UNICODE=%d",*p);

newstring=(jchar*)p;
ret=env->NewString(newstring,1);

//-- 測試第二部分 --
const jchar * jstr;
jboolean copy='1';

jstr=env->GetStringChars(s,&copy);
wprintf(L"/n[從JAVA環境傳入字符]%s/n",jstr);
env->ReleaseStringChars(s,jstr);

return ret;
}

============================
運行測試程序
============================
把編譯后的DLL文件放在恰當的位置(不會不知道什么是恰當的位置吧)。

假如你真的不知道的話,告訴你一個最簡單的方式,看看
java.library.path屬性就知道了。

程序運行結果。
%JAVA_HOME%/bin/java jni

[在NATIVE環境中]'測'的UNICODE=27979
[[從NATIVE環境返回字符]測
[在JAVA環境中]'測'的UNICODE=27979

============================
解釋測試過程
============================
由于JAVA是UNICODE運行時的,我很懶,自己不可能寫字節碼與UNICODE之間的轉碼程序。
網上有的,實際上很多TELNET客戶端程序都是自己帶有的。但是我們就運行在WINDOWS環境下
當然就直接使用他的UNICODE支持了(UNIX環境當然也有相應的支持)。

(1)確認我們使用UNICODE支持。請仔細閱讀TCHAR.h文件,不管你是為了本次測試還是為了提高你WINDOWS編程的熟悉

。
類型使用wchar_t作為本地字符UNICODE支持。

(2)自己熟悉一下JNI接口關于UTF和UNICODE操作的相關函數。

(3)自己仔細看看上面的代碼就可以了.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚州国产精品久久久| 亚洲色图综合网| 欧美成人精品一区二区| 久久久国产一区二区| 日韩欧美在线视频日韩欧美在线视频| 中文字幕国内精品| 国产精品美女久久久久av超清| 日韩av日韩在线观看| 国产亚洲欧美日韩精品| 美乳少妇欧美精品| 国产一区二区三区视频在线观看| 奇门遁甲1982国语版免费观看高清| 成人亚洲综合色就1024| 91亚洲一区精品| 国产精品美女无圣光视频| 午夜伦理精品一区| 在线成人免费网站| 亚洲美女在线视频| 国语自产偷拍精品视频偷| 亚洲精品免费网站| 亚洲最大福利网| 亚洲电影在线观看| 热久久美女精品天天吊色| 精品久久久久久久中文字幕| 亚洲xxxx视频| 亚洲国产精品成人一区二区| 国产午夜精品久久久| 热re99久久精品国产66热| 欧美精品成人在线| 97在线视频精品| 正在播放欧美一区| 亚洲偷熟乱区亚洲香蕉av| 91精品国产乱码久久久久久蜜臀| 亚洲精品资源美女情侣酒店| 欧美性高潮床叫视频| 亚洲国产日韩欧美综合久久| 日本欧美一级片| 国内精品久久久久影院 日本资源| 久久久久久网址| 日本最新高清不卡中文字幕| 一区二区三区四区在线观看视频| 国内精品久久久久| 久久天天躁日日躁| 超碰91人人草人人干| 欧美在线播放视频| 日本亚洲欧美成人| 国模精品视频一区二区| 97视频在线观看网址| 国产成人精品电影| 色诱女教师一区二区三区| 亚州精品天堂中文字幕| 久久夜色精品国产| 亚洲专区国产精品| 久久久久久久久久亚洲| 亚洲专区在线视频| 中文字幕av一区二区三区谷原希美| 欧美在线xxx| 色偷偷88888欧美精品久久久| 欧美性猛交xxxx富婆弯腰| 欧美电影免费看| 国产精品免费一区豆花| 91免费精品视频| 久久99亚洲精品| 亚洲精品免费网站| 尤物精品国产第一福利三区| 成人在线国产精品| 亚洲男人av电影| 国产精品96久久久久久又黄又硬| 日本久久久久久久| 95av在线视频| 国产亚洲xxx| 欧美孕妇毛茸茸xxxx| 国产精品永久免费视频| 日韩成人中文电影| 91欧美日韩一区| 国产69精品久久久久9999| 77777少妇光屁股久久一区| 亚洲黄色www网站| 亚洲高清av在线| 久久久精品一区二区| 美女精品久久久| 91在线视频一区| 日韩人在线观看| 亚洲精品av在线| 国产欧美va欧美va香蕉在| 51ⅴ精品国产91久久久久久| 欧美性生交xxxxxdddd| 欧美日韩性视频在线| 国产精品久久久久久久久久三级| 庆余年2免费日韩剧观看大牛| 精品日韩中文字幕| 久久国产精品久久国产精品| 亚洲欧美国内爽妇网| 国产精品视频男人的天堂| 海角国产乱辈乱精品视频| 亚洲四色影视在线观看| 国产91久久婷婷一区二区| 欧美一级片免费在线| 日韩欧美一区二区三区久久| 亚洲www永久成人夜色| 国产一区二区三区直播精品电影| 韩国19禁主播vip福利视频| 亚洲香蕉成人av网站在线观看| 日韩美女在线观看一区| 久久久久久久久久久人体| 成人免费观看a| 色噜噜狠狠狠综合曰曰曰88av| 91精品久久久久久久久不口人| 亚洲综合av影视| www.亚洲免费视频| 中文字幕精品在线视频| 久久影院免费观看| 爽爽爽爽爽爽爽成人免费观看| 亚洲女性裸体视频| 精品国产依人香蕉在线精品| 久久伊人91精品综合网站| 色综合久久中文字幕综合网小说| 欧美精品福利视频| 18性欧美xxxⅹ性满足| 日韩av快播网址| 97精品国产91久久久久久| 欧美精品videosex极品1| 日韩欧美国产免费播放| 91av在线视频观看| 都市激情亚洲色图| 国产精品欧美日韩一区二区| …久久精品99久久香蕉国产| 欧美高清电影在线看| 亚洲精品中文字幕有码专区| 亚洲成人三级在线| 欧美丰满少妇xxxxx| 亚洲欧美福利视频| 欧美孕妇毛茸茸xxxx| 色偷偷av一区二区三区| 成人免费在线视频网址| 久久国产精品久久国产精品| 国产精品自产拍在线观看中文| 91在线精品视频| 38少妇精品导航| 欧美激情手机在线视频| 综合久久五月天| 精品av在线播放| 国产精品成人久久久久| 欧美在线一级视频| 欧美又大粗又爽又黄大片视频| 亚洲成avwww人| 色七七影院综合| 欧美成人免费一级人片100| 色无极亚洲影院| 成人综合国产精品| 国产aⅴ夜夜欢一区二区三区| 欧美精品videofree1080p| 在线观看日韩视频| 欧美专区在线视频| 91亚洲va在线va天堂va国| 91久久在线观看| 久久精品国产亚洲7777| 国产精品6699| 日韩av影视在线| 91精品在线观| 日韩a**中文字幕| 日本伊人精品一区二区三区介绍| 伊人伊人伊人久久| 亚洲国产91精品在线观看|