黑马程序员技术交流社区

标题: java编程中文乱码的解决方法 [打印本页]

作者: 别想太多    时间: 2015-5-22 23:49
标题: java编程中文乱码的解决方法

本文主要解决以下几个问题:

一、如何使用post方法及post的内容

二、如何解决http包的乱码

三、网络编程的主要过程下面一一介绍。


一、如何使用post方法及post的内容

post是客户端向服务器发送的行为,这是很多人多明白的。但是,post传递的内容及格式和如何使用post编程,这一点很多人则不是很清楚。我也是搜集了大量的网络上的资源才明白的,所以要感谢网上那些无私奉献的“大牛”。

post主要传递的是NameValuePair,就是说是若干对Name和Value。当然格式也是非常重要的。比如form表单传递(post),传递用户名user,传递密码password。user对应的值假设为admin,password对应的值是admin,那么post的内容就是——user=admin&password=admin注意,Name和value之间有一个“=”,而两个Name和Value对之间有“&”,这个在写程序时要注意


二、如何解决http包乱码其实中文乱码问题大家并不陌生,而且对此也是“深恶痛绝”。我也没有一个完全的解决办法,可以用之四海皆准。不过,在网络编程中,我提出一种方式,保证可以通过。(痛苦了一天去测试各种方法,有些网上的代码根本就不能用,稍稍吐槽一下,但是不影响我对网络共享资源的推崇以及对那些无私的人的尊敬)

如下:

1.对于中文Value(或Name,我没测试Name,因为两个是一样的),可以使用如下的方式URLEncoder.encode(values, "UTF-8"),之后组装好post出去。

2.通过URL连接收到服务端返回的inputstream时,可以做类似如下转换:in = new Scanner(conn.getInputStream(),"UTF-8");这样就可以保证post出去的是UTF-8,接收到的也是UTF-8。


三、网络编程的主要过程

第一步,建立连接URL url;url = new URL(strURL);URLConnection conn = url.openConnection();

第二步,设置connconn.setDoInput(true);conn.setDoOutput(true);这个是必须的,至于为什么我目前也没有搞清楚。大家可以在评论中讨论,我将来弄清楚时会给出答案

第三步,建立输出流并准备输出内容

A、PrintWriter out = new PrintWriter(conn.getOutputStream());

B、boolean first = true;//下面是实现post内容的一个方式

for(int i=0; i<7; i++)

{

if(first)

{ first = false; }

else{ out.print("&"); }

out.print(names);

out.print("=");

out.print(URLEncoder.encode(values, "UTF-8"));//这里处理中文乱码 }

out.close();

第四步,准备接收

Scanner in;in = new Scanner(conn.getInputStream(),"UTF-8");//这里处理中文乱码

第五步,处理输入流内容

StringBuilder response = new StringBuilder();

while(in.hasNextLine())

{ response.append(in.nextLine()); response.append("\n");}

String temp = response.toString();System.out.println(temp);

这里使用StringBuilder类,其实是优化StringBuffer,也可以使用StringBuffer。

后记

通过这三部分介绍,可以很轻松的搭建一个模拟form表单提交的过程,而且将中文乱码问题很好处理。这也可以作为爬虫程序的一个参考。



作者: 别想太多    时间: 2015-5-22 23:50
顶一个!
作者: 喻忠航    时间: 2015-5-22 23:53
恩 学习了!谢谢分享!
作者: jakemind    时间: 2015-5-22 23:57
学习了..................
作者: 别想太多    时间: 2015-5-23 00:00
jakemind 发表于 2015-5-22 23:57
学习了..................

一起学习!
作者: 别想太多    时间: 2015-5-23 00:02
jakemind 发表于 2015-5-22 23:57
学习了..................

多多交流!大家一起学习!
作者: Grady    时间: 2015-5-23 00:09
顶一个                     




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2