中文的编码常用的有3种格式:1)gb2312(就是ascii码方式,也说ansi) 2)unicode 3)utf-8
c++一般采用ancii码,而java一般采用unicode,而SymbianC++(以后简称symbian)采用unicode或utf-8
比如汉字“好”: unicode为“7D 59”,而ascii为“BA C3”, utf-8编码为3个字节。
终端你可以选择使用char *, unsigned char *, 但是这不是推荐使用的,很多时候处理的时候如界面等需要转化为终端的字符编码格式。
现在分4部分讲解字符编码转化(例子假设,java和symbian间采用utf-8,c++和symbian之间采用ASCII码):
1) Symbian -> Java 发送含有中文的消息
我们假设你的Symbian的发送消息的接口采用的是HBufC8 * (utf-8)
那么你在发送你的消息之前,需要将数据转化为utf-8格式,
例如,你可以使用CnvUtfConverter::ConvertfromUnicodeToUtf8()将界面的TBuf转化为8位的utf-8格式,转化过程中你要尤其注意,为HBufC8 * 开辟的内存应该是TBuf长度的2倍!
至于终端如何处理Java端发送的消息就不言而喻了,Java通常会只发送一个String,
也就是一个Unicode字符串,这个时候一般Symbian会以TDes8接收,实际上接收的数据是Unicode的而不是utf-8的,但是
Symbian支持这种格式,所以可以直接就按这种方式处理,而不需要转化。当然,要在界面上显示的话还是需要CnvUtfConverter::
ConvertToUnicodefromUtf8())
2) Java -> Symbian 发送含有中文的消息
服务器端
当然也要处理中文了,刚才已经说了,发送的时候你可以直接发送String
(Unicode),让Symbian去解析,但是接收就得十分小心!!终端Symbian过来的是HBufC8*
(utf-8)格式,Java切忌不要直接用String去接收,需要按字节接收,然后再将这些字节解析成utf-8,再转化为String,有几条简单
的语句可以完成这个操作:
byte b3[] = ...; //来自Symbian的utf-8字节
DataInputStream dis=new DataInputStream(new ByteArrayInputStream(b3));
String chinastring = dis.readUTF();
3) Symbian -> C++ 发送含有中文的消息
现在我们再来讨论下,如何将Symbian的消息发送给C++子系统呢, 显然,C++子系统是按照char */unsigned char *处理字符串的,也就是ASCII码方式(中文就是扩展的ANSI即GB2312�