购买服务 会员注册 会员登录
  设为首页 加入收藏 联系我们
Welcome to WebXml.com.cn
Web Services 网站建设 域名交易 服务支持 下载中心 信息资讯 联系我们 返回首页
 
服务支持 - Web Services

J2me访问.NET开发的WEB服务解决中文乱码

www.WebXml.com.cn 发表日期:2010年05月21日 03:54 星期五
 

 

分析: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(),就简单多了。

 
 
 
关闭本窗口
 
请就此篇文章提供反馈:
很有帮助 没有帮助
9 8 7 6 5 4 3 2 1  
   
 
发表评论:
   
< 300中文字或< 600英文字符
 
WebXml.com.cn 声明:
  WebXml.com.cn 和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性(不包括在单独的书面协议项下 WebXml.com.cn 向您提供的任何服务),不作任何声明。所有该等文件及有关图形均 " 依样 " 提供,而不带任何性质的保证。也许这些文件已经过期,且 WebXml.com.cn 不承诺更新它们。WebXml.com.cn 和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于使用、销售、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,WebXml.com.cn 和/或其各供应商就任何问题而造成的损失不负任何责任。
 
 
 
WEB 服务 网站建设 域名交易 服务支持 下载中心 信息资讯 联系我们 首 页
版权所有 © 2006 - 2014 上海思集信息科技有限公司 保留所有权利        本站声明 Search powered by Google
Powered Asp.net 2.0