索爱GB2312编码 有乱码如何解决?

zhouxiaoli521 2010-06-20 02:11:13
我在索爱w850i上遇到的问题,通过之前的测试,我已经知道它不支持GBK编码。
我从服务器上读取一个文本文件,我之前用字节流读取,读完后用 new String(chunk,"GB2312")还原,但是会有某些字符是乱码,我换成字节流读取就完全没有问题,这是为什么呢?
一下是两种读取方法的代码。
字符流读取方法
Java code
public void connection1() {
new Thread(new Runnable() {
public void run() {
HttpConnection httpConn = null;
InputStreamReader is = null;
try {
httpConn = (HttpConnection) Connector.open(rul);
int code = httpConn.getResponseCode();
char[] data = new char[1024 ];
if (code == HttpConnection.HTTP_OK) {
// 获得输入流 接受数据
is = new InputStreamReader(httpConn.openInputStream(),"gb2312");
int ch = 0;
while ((ch = is.read(data)) != -1) {
char[] chunk = new char[ch];
System.arraycopy(data, 0, chunk, 0, ch);
sb.append(data);//sb StringBuffer类型的一个全局变量用于显示在屏幕上
}
}
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}



字节流读取方法
Java code public void connection1() {
new Thread(new Runnable() {
public void run() {
HttpConnection httpConn = null;
InputStream is = null;
try {
httpConn = (HttpConnection) Connector
.open(url);
int code = httpConn.getResponseCode();
byte[] data = new byte[1024 ];
if (code == HttpConnection.HTTP_OK) {
// 获得输入流 接受数据
is = httpConn.openInputStream();
int ch = 0;
while ((ch = is.read(data)) != -1) {
byte[] chunk = new byte[ch];
System.arraycopy(data, 0, chunk, 0, ch);
String s = new String(chunk,"GB2312");
sb.append(data);
}
}
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
...全文
122 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuhaijie1 2011-05-10
  • 打赏
  • 举报
回复
到底怎么解决啊?小弟请教一下 tsFC = (FileConnection) Connector.open(TSfilename);
if (!tsFC.exists())
tsFC.create();
else
tsFC.truncate(0);
OutputStream os2 = tsFC.openOutputStream();
tsWriter = new OutputStreamWriter(os2, "GB2312");
tsWriter.write("'开始时间','" + hh +"时"+ min+"分" + "'\r\n" + TSinfo);
tsWriter.flush();索爱手机上的乱码问题
Sodino 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 redduke1202 的回复:]
Java code

byte[] chunk = new byte[ch];
System.arraycopy(data, 0, chunk, 0, ch);
String s = new String(chunk,"GB2312");


每个汉字由多个字节构成,如果某个字的多个字节被截断,那么new String肯定出乱码
[/Quote]


嗯,学习。

[Quote=引用 6 楼 redduke1202 的回复:]

1.用字符流
2.用字节流全部读取后,一起用指定编码构造字符串
[/Quote]

嗯,学习
zhouxiaoli521 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 redduke1202 的回复:]
Java code

byte[] chunk = new byte[ch];
System.arraycopy(data, 0, chunk, 0, ch);
String s = new String(chunk,"GB2312");


每个汉字由多个字节构成,如果某个字的多个字节被截断,那么new String肯定出乱码
[/Quote]
恩 对,是这个原因!我怎么没想到呢!
「已注销」 2010-06-20
  • 打赏
  • 举报
回复
1.用字符流
2.用字节流全部读取后,一起用指定编码构造字符串
「已注销」 2010-06-20
  • 打赏
  • 举报
回复

byte[] chunk = new byte[ch];
System.arraycopy(data, 0, chunk, 0, ch);
String s = new String(chunk,"GB2312");

每个汉字由多个字节构成,如果某个字的多个字节被截断,那么new String肯定出乱码
zhouxiaoli521 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 youanyyou 的回复:]
乱码问题~~解决没
[/Quote]
目前已经发现乱码的地方解决了,至于是否彻底解决了,我也没底。
zhouxiaoli521 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sodino 的回复:]
字符流可能本身已经把编码给弄乱了。

直接读byte再根据字符集还原比较踏实。
[/Quote]
我原本就是按着字节流去读的 有乱码 所以才用的字符流,
而且我读取的文本里面的字符编码都在GB2312的范围之内。
Sodino 2010-06-20
  • 打赏
  • 举报
回复
字符流可能本身已经把编码给弄乱了。

直接读byte再根据字符集还原比较踏实。
Java技术栈 2010-06-20
  • 打赏
  • 举报
回复
乱码问题~~解决没

13,100

社区成员

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

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