网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  j2me中有关手机中文传输问题的解决办法     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:106次  录入:管理员--2007-11-16  
 

服务器到客户端:

下面代码是服务器端把字符写到client端,经过gbencoding()方法,所有的字符编码成:\uxxxx.

代码:

/**
* write the string data
*
* @param out
* @param value
*/
public static void writeunicode(final dataoutputstream out, final string value)
throws actionexception {
try {
final string unicode = stringformatter.gbencoding( value );
final byte[] data = unicode.getbytes();
final int datalength = data.length;

system.out.println( "data length is: " + datalength );
system.out.println( "data is: " + value );
out.writeint( datalength );
out.write( data, 0, datalength );
} catch (ioexception e) {
throw new actionexception( imdefaultaction.class.getname(), e.getmessage() );
}
}

以下代码是gbencoding()方法,把双字节字符转换成\uxxxx,asiic码在前面补00。

代码:

/**
* this method will encode the string to unicode.
*
* @param gbstring
* @return
*/
public static string gbencoding( final string gbstring ) {
char[] utfbytes = gbstring.tochararray();
string unicodebytes = "";
for( int byteindex = 0; byteindex < utfbytes.length; byteindex ++ ) {
string hexb = integer.tohexstring( utfbytes[ byteindex ] );
if( hexb.length() <= 2 ) {
hexb = "00" + hexb;
}
unicodebytes = unicodebytes + "\\u" + hexb;
}
system.out.println( "unicodebytes is: " + unicodebytes );
return unicodebytes;
}

在客户端收到服务器的数据,先将其一个一个字符解码。双字节显示正常。

代码:

**
* this method will decode the string to a recognized string
* in ui.
* @param datastr
* @return
*/
private stringbuffer decodeunicode( final string datastr ) {
int start = 0;
int end = 0;
final stringbuffer buffer = new stringbuffer();
while( start > -1 ) {
end = datastr.indexof( "\\u", start + 2 );
string charstr = "";
if( end == -1 ) {
charstr = datastr.substring( start + 2, datastr.length() );
} else {
charstr = datastr.substring( start + 2, end);
}
char letter = (char) integer.parseint( charstr, 16 ); // 16进制parse整形字符串。
buffer.append( new character( letter ).tostring() );
start = end;
}
return buffer;
}

客户端到服务器:

客户端使用下面方法把手机端的字符编码成iso-8859-1,传给服务器。

代码:

/**
* write the string data
* @param value
* @param outdata
*/
private void writesjis(dataoutputstream outdata, string value) {
try {
byte[] data = null;
// data = ( value ).getbytes( "utf-8" );
data = ( value ).getbytes( "iso8859_1" );
outdata.writeint(data.length);
outdata.write(data, 0, data.length);

system.out.println(" data.length: " + data.length);
system.out.println(" data.value: " + value);
} catch (exception ex) {
system.out.println(" write error ");
ex.printstacktrace();
}
}

服务器端收到客户端字符流,是用下面方法将其转为utf-8,以后的操作都是基于utf-8编码。sqlserver可能会由于内吗不通有不同的变换,所以存取数据库是还要是具体的db内码作相应的处理。

代码:

/**
*
* @param iso
* @return
*/
public static string isotoutf( final string iso ) {
string utfstring = iso;
if( iso != null ) {
try {
utfstring = new string( iso.getbytes( "iso-8859-1" ), "utf-8" );
} catch ( unsupportedencodingexception e ) {
utfstring = iso;
}
} else {
utfstring = "";
}
return utfstring;
}

注:

本方法应该不是最有效的,但是只要手机支持unicode的gb2312编码,应该都可以显示正常。

 
 
上一篇: web互动的革命 jsf框架中使用的设计模式    下一篇: 新手入门:初学者搭建j2me移动开发平台
  相关文档
java中输入输出的总括(初学必看) 11-17
java相关基础知识(6) 11-17
struts构建文件上传(一) 11-17
使用javaserver pages技术生成动态xml 11-17
servlet的一些特点 11-17
java servlet和jsp教程(4) 11-17
通过aspire和tomcat使用层次数据集 11-17
推荐个上传文件的javabean给大家 11-17
触摸java中的包和文档 11-16
国外专家谈游戏制作 11-17
jdo 2.0 的查询语言新特性 11-17
apache tomcat 5.5.15-beta 发布 11-17
1100行代码设计一个线程池 11-17
监控proxool连接池的活动连接变化情况 11-17
servlet和jsp 性能调整技术 11-17
java入门:状态对象--数据库的替代者 03-06
jrockit jvm对aop的支持,第2部分 11-17
集成jsf与beehive page flow 11-17
选 择 您 需 要 的 java 书 籍 11-17
java 循环语句 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息