站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题WTK从服务器上获取的中文是乱码

WTK从服务器上获取的中文是乱码

摘要: WTK从服务器上获取的中文是乱码


WTK2.2本身是支持中文的,为什么从服务器上获取的中文数据是乱码,有什么解决方法吗?
服务器发送数据代码;
while (rs.next()) {
binfo.setSort(rs.getString(1));
byte[] data = binfo.serializeSort(); //这是一个序列化方法
//一条记录的长度
dos.writeInt(data.length);
//发送账单数据
dos.write(data);
System.out.println(rs.getString(1));
}

手机接收数据代码
//读取传输过来的缴费清单的数目
int num = inputStream.readInt();

BookInfo[] binfo = new BookInfo[num];

for (int i = 0; i < num; i++) {

byte[] data = new byte[inputStream.readInt() ];

//读取数据
inputStream.read(data);
binfo[i] = new BookInfo();

binfo[i].deserializeSort(data);//反序列化

//显示返回信息

}


以上代码传送字符型数据没问题


import java.io.IOException;
import java.io.InputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Conn extends MIDlet implements CommandListener,Runnable{
Form f;
Command c;
TextField tf;
Display display;
HttpConnection conn;
public Conn() {
super();
f = new Form("连接");
c = new Command("连接",Command.OK,1);
tf = new TextField("地址:","http://localhost:8080/a.jsp",100,TextField.URL);
f.append(tf);
f.addCommand(c);
f.setCommandListener(this);
display = Display.getDisplay(this);
}


protected void startApp() throws MIDletStateChangeException {
f.append(((char)0x4f60)+"");
display.setCurrent(f);
}


protected void pauseApp() {

}


protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}
public void commandAction(Command c,Displayable d)
{
Thread t = new Thread(this);
t.start();
}
public void run()
{
try {
conn = (HttpConnection)Connector.open(tf.getString());
if(conn.getResponseCode() == HttpConnection.HTTP_OK)
{
InputStream in = conn.openInputStream();
int c1;
String content = "";
while((c1=in.read()) != -1)
{
content = content+(char)c1;
}
String content2="",temp;
char c2;

for(int i=0;i{
c2 = content.charAt(i);
if(c2 == '//' && content.charAt(i+1)== 'u')
{
temp = content.substring(i+2,i+6);
try{
char c3 = (char)Integer.parseInt(temp,16);
content2 = content2+c3;
i=i+5;
}
catch(NumberFormatException e)
{
content2 = content2+c2;
}
}
else
content2 = content2+c2;
}
f.append(content);
}
else
{
f.append("连接出错");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}



还有,先把网页用active2ascii命令转换一下


不明白,我的数据是servlet从SQL数据库取出来的,不是网页中的数据,发回到手机端WTK模拟器中文就出现乱码了,但对于字母可以显示出来
还有数据库的中文怎样转化成ASCII


使用UTF-8将服务器数据转换为byte数组,客户端使用utf-8构造字符串


我已经用了UTF,我在序列化数据传送的函数用到了.然后转化成byte[]型传送
public byte[] serializeSort() throws IOException{
ByteArrayOutputStream bout =new ByteArrayOutputStream();
DataOutputStream dataStream=new DataOutputStream(bout);
dataStream.writeUTF(sort);
return bout.toByteArray();

}
public void deserializeSort(byte[] data) throws IOException{
ByteArrayInputStream bin= new ByteArrayInputStream(data);
DataInputStream dataStream = new DataInputStream(bin);
sort = dataStream.readUTF();
}


你先看一下内存数据对否,如果对就是字体的问题


不对,你的代码有问题:
int num = inputStream.readInt();

BookInfo[] binfo = new BookInfo[num];

for (int i = 0; i < num; i++) {

byte[] data = new byte[inputStream.readInt() ];

和你的输出不匹配


↑返回目录
前一篇: j2me与后台程序的关系?
后一篇: 关于异常的疑惑