`
xitong
  • 浏览: 6194913 次
文章分类
社区版块
存档分类
最新评论

Java中将数据由UTF8转换成GB2312格式

 
阅读更多

正在做一个测试桩模块,模拟一个socket Server 的行为。使用了java 语言来实现。
1. 实现一个简单的socket Server,实现了访问的监听,
2. 实现根据客户的请求做出应答,
3. 实现根据客户的各种不同请求作出各种不同的应答消息,
既然是做桩模块,当然目的是为了测试,因此要认真考虑如何方便测试工作。
在实现过程中,为了方便测试工作。作了如下考虑:
1. 把应答消息写到文件里,以避免频繁修改该桩模块程序。
2. 把不同的应答消息保存到不同的文件里,这样,只要server运行起来,就可以根据客户的请求来作出不同的应答,避免频繁启动server程序。
在本地测试没有任何问题,(本地环境XP/sdk1.6),但是在上传到server后,发现应答信息中莫名其妙的丢失了一些字符。(server环境linux/sdk1.4)
察看了使用的类,可以确定和sdk的版本没有关系。开始怀疑是应答信息文件的编码问题。
文件的编码在本地使用的是系统默认,gb2312。发现server的系统默认是utf-8。
既然找到了原因,就开始想办法解决。通过google 和 java doc,发现一些java编码问题的讨论文章。在此总结一下:
1. 直接使用FileReader肯定会有编码问题,换成FileInputStream 的话,可以通过指定编码方式来获得正确的文件内容。
BufferedReader bReader = new BufferedReader(
new InputStreamReader(
new FileInputStream(fileName[i]),"GB2312"));
2. 读入文件时,有read() 方法和readLine() 两种方法,readLine()方法会使用默认的编码方式,因此不能正确获得文件内容,因此应当使用read()方法。
3. 读取文件内容后,应当使用getBytes("GB2312")方法,正确转换编码方式。如:
b = s.getBytes("GB2312");
String o = new String(b,"GB2312");

4.把应答信息返回给client端时,也要正确指定编码方式。如:
out =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream(),"GB2312")), true);

经过这样的处理,应答信息就会得到想要的编码形式。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics