分析:java的默认编码是iso-8859-1,.NET的默认编码是utf-8,因为我们的webservice的web方法的参数是由j2me来提供,而且也可能是中文字符,而且返回值也可能是中文字符,所以要保证服务端和客户端都能正常解码中文,而j2me里的httpconnection类访问web服务的时候默认编码不是gb2312,所以要设置一下。 准备: 下载jdk1.6,netbeans4.1,mobility pack4.1,WTK2.3文件列表如下 jdk-6-rc-bin-b66-windows-i586-05_jan_2006.exe netbeans-4_1-windows-ml_zh_CN.exe netbeans_mobility-4_1-win_zh_CN.exe sun_java_wireless_toolkit-2_3-beta-windows.exe 先安装jdk,再安装WTK,然后安装netbeans,最后安装mobility pack,安装netbeans和mobility的时候会自动搜索jdk类库,指定一下就行了。 另外最好熟悉一下j2me的简单开发
以下以.net开发的WEB服务gb2312代码为例
用J2ME写客户端调用程序 打开netbeans,新建移动程序,新建一个com.sun.j2me包,然后新建一个MIDlet,名字叫MIDlet,键入以下代码
/* * HttpTest.java * * Created on 2010年3月6日, 下午3:30 */ package com.sun.j2me; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.io.*; import java.io.*; import java.lang.String;
/** * * @author * @version */ public class HttpTest extends MIDlet { private Display display; public HttpTest() { display = Display.getDisplay(this); } protected void startApp() throws MIDletStateChangeException { HttpConnection hc = null; DataInputStream dis = null; try { String url = "http://localhost/WebService1/Service1.asmx/Hello?str=服务"; hc = (HttpConnection)Connector.open(url); hc.setRequestProperty("content-type", "text/html;charset=gb2312"); //这里要设置charset int len = (int)hc.getLength(); dis = new DataInputStream(hc.openInputStream()); if (len > 0) { byte[] myData = new byte[len]; dis.readFully(myData); String content=""; dis.read(myData,0,myData.length); content = new String(myData,"UTF-8"); //这里转换成UTF-8编码 Form f = new Form("HTTP Test"); f.append(content); display.setCurrent(f); } } catch(Exception e) { System.out.println(e.toString()) ; notifyDestroyed(); } finally { try{ if(hc!=null) hc.close(); if(dis!=null) dis.close(); }catch(Exception e){ System.out.println("关闭错误"); } } }
protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } }
按F6就可以运行你的程序了,点击模拟器的启动键,测试你的程序,可以看到web服务返回的XML字符串,然后你可以进入java里相应的XML操作的类来解析返回的XML来获取指定节点的数据并进一步执行业务逻辑。 小节: 一般来说解决中文问题,传输数据的时候不要考虑编码问题,只传输字节流,客户端读取字节流后根据相应的编码协议进行解析,一边是GB2312另一边也是GB2312。如果web服务和客户端都是java的话,可以一边用WRITEUTF(),另一边用READUTF(),就简单多了。
|