socket 连接,取得的信息中文是乱码,怎么解决?

leinchu 2008-01-30 03:51:29
我就是拿wtk的networkdemo的socket那个改了下client那个直接连本地的23,23返回的信息中英文就能显示,中文就是乱码;怎么解决?

sc = (SocketConnection) Connector.open("socket://192.168.1.108:23");
si.setText("Connected to server");
is = sc.openInputStream();
os = sc.openOutputStream();

// Start the thread for sending messages - see Sender's main
// comment for explanation
sender = new Sender(os);

// Loop forever, receiving data
while (true) {
StringBuffer sb = new StringBuffer();
int c = 0;

while (((c = is.read()) != '\n') && (c != -1)) {
sb.append((char) c);
}

if (c == -1) {
break;
}

// Display message to user
si.setText("Message received - " + sb.toString().getBytes("utf8").toString());
}
...全文
852 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhlwwj1314 2008-01-31
  • 打赏
  • 举报
回复
4搂正解
leinchu 2008-01-31
  • 打赏
  • 举报
回复
搞定了
sc = (SocketConnection) Connector.open("socket://192.168.1.108:23");
si.setText("Connected to server");
is = sc.openInputStream();
os = sc.openOutputStream();
InputStreamReader isr=new InputStreamReader(is,"GBK");
sender = new Sender(os);
while (true) {
int c = 0;
while (((c = isr.read()) != '\n') && (c != -1)) {
sb.append((char)c);
}
if (c == -1) {
break;
}
tmp1= sb.toString();
si.setText(
tmp1
);
}
用InputStreamReader
leinchu 2008-01-31
  • 打赏
  • 举报
回复
我觉得源内容的编码就是gb2312的,因为我不做任何转码,象这样
while (true) {

int c = 0;
while (((c = is.read()) != '\n') && (c != -1)) {
sb.append((char)c);
}

if (c == -1) {
break;
}
tmp1+= sb.toString
si.setText(
tmp1
);
}
}
内容里面英文和符号都是正确的,只有中文是乱码,是不是中文被分解成两个字符了?
是的话怎么解决呢?
leinchu 2008-01-31
  • 打赏
  • 举报
回复
都不行,

不知道对方编码是什么,

谁有好点的手册,带例子,就象msdn那种
「已注销」 2008-01-30
  • 打赏
  • 举报
回复
你代码里按byte读取,转char保存到StringBuffer里,编码已经乱了
要读到byte[]里一起转字符串
hailang_maxu 2008-01-30
  • 打赏
  • 举报
回复
用dataOutputStream这个流才可以
老紫竹 2008-01-30
  • 打赏
  • 举报
回复
1 对方发过来的是什么编码,如果是UTF-8的,则用
new String(sb.toString().getBytes(), "UTF-8"));
2 如果是GBK/GB2312
new String(sb.toString().getBytes(), "GB2312"));
gougou8180 2008-01-30
  • 打赏
  • 举报
回复
用inputstreamreader来读
用inputstream的话 先装到一个byte[]中, 然后根据编码转化成字符串
olivesoup 2008-01-30
  • 打赏
  • 举报
回复
你可以这样转成中文的

si.setText("Message received -" + new String(sb.toString().getBytes("UTF-8"), "GB2312"));

olivesoup 2008-01-30
  • 打赏
  • 举报
回复
utf8??
是UTF-8吧

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧