JAVA & CORBA & JNI & C++中文问题

·        JAVA(JAVA中字符串采用Unicode(16bit)即UCS-2编码方式,用两个字节表示每个字符,包含了所有字符字形)

 

(↑)    CORBA->JAVA:(JAVA端,用于显示JAVA获取到的CORBA数据)

   StringjavaStr = newString(corbaStr.getBytes("ISO-8859-1"));

 

(↓)    JAVA->CORBA:(CORBA端,用于将JAVA端字符串转为可使CORBA传输的字符串)

   StringcorbaStr = new String(javaStr.getBytes(),"ISO-8859-1");

 

·        CORBA(两种字符串处理:string类型处理ASCII字符串,wstring类型处理多字符,如中文)

 

(↑)    JAVA->CORBA:(CORBA端,用于将JAVA端字符串转为可使CORBA传输的字符串)

   StringcorbaStr = new String(javaStr.getBytes(),"ISO-8859-1");

 

(↓)    CORBA->JAVA:(CORBA端,用于将CORBA字符串转为JAVA字符串,进行JNI调用)

   StringjavaStr = newString(corbaStr.getBytes("ISO-8859-1"));

 

·        JNI(字符串采用UTF-8编码方式,即变长的Unicode,ASCII字符一个字节,中文为三个字节)

 

   JNI只做接口封装定义,具体接口实现由C++完成

 

·        C++(ASCII字符一个字节,中文为GB2312编码,两个字节)

 

(↑)    C++->JNI:(C++端,采用字节传送给JNI)

   //NewStringUTF方法不能解决中文问题,所以将字符串char *按字节传送给JNI

   env->NewByteArray(...);

 

 

(↓)    JNI->C++:(C++端,将JNI的UTF-8字符串转为GB18030编码)

   调用JAVA的String类型的getBytes方法,设置编码方式为GB18030,再将jbyteArray转为C++的char*;

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值