BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #14571同步于 2010/5/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【求助】JSP的编码问题,望大牛解答,谢谢!

MeForever
2010/5/13镜像同步3 回复
1、先发下我得到的结果: 标题:机械制造业:打造多系统一体化的信息平台 摘要: 97%E4%BA%AC%E4%BA%8C%E4%B8%83%E8%BD%A6%E8%BE%86%E5%8E%82%E7%9A%84%E4%BF%A1%E6%81%AF%...%9A%84%E7%8E%B0%E8%B1%A1%E3%80%82%E9%80%9A%E8%BF%87%E5%87% 标题:李博诺:IBM一直把投资专注于四个具高潜力的领域 摘要: 83%BD%E8%AE%B2%E6%99%AE%E9%80%9A%E8%AF%9D%EF%BC%8C%E4%B8%8D%E8%83%BD%E8%AE%B2%E4%B8%AD%E6%96%87%EF%BC%8C%E4%BD%86%E6%98%AF...%8D%E4%B8%80%E6% 2、简单说一下我这个程序的功能: 前台是一个文本框,输入关键字,然后自动填写参数向网易的新闻搜索引擎发送HTTP请求,然后格式化返回结果。 3、查询页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form method="post" action="Postcnki.jsp"> 输入:<input type="text" name="search"> <input type="submit" value="提交"> </form> </body> </html> 4、查询处理代码: <%@ page language="java" contentType="text/html; charset=UTF-8" import ="com.test.*" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% request.setCharacterEncoding("UTF-8"); String search=request.getParameter("search"); request.getPathInfo(); //search = java.net.URLEncoder.encode(search); %> <%=search%> <% PostTest.execution(search); %> <%for(int i=0;PostTest.news_title[i]!="";i++){%> <br>标题:<%=PostTest.news_title[i]%> <br>摘要:<%=PostTest.news_summary[i]%><br><br><br> <%}%> </body> </html> 其中 PostTest.execution()是我自己写的一个方法 5、PostTest.execution()中与编码可能相关的代码: public static void execution(String search) throws Exception { PostMethod postMethod = new PostMethod( "http://news.youdao.com/search"); String search_Ending=StrToURL(search); NameValuePair[] data = { new NameValuePair("q", search_Ending), new NameValuePair("start", "0"), new NameValuePair("length", "10"), new NameValuePair("ue", "utf8"), new NameValuePair("s", ""), new NameValuePair("tl", ""), //new NameValuePair("keyfrom", "search.index") }; // 将表单的值放入postMethod中 postMethod.setRequestBody(data); System.out.println(postMethod.getResponseCharSet()); HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(1000*60*10); HttpClientParams params = new HttpClientParams(); params.setContentCharset("UTF-8"); client.setParams(params); int status = 0; //try { status = client.executeMethod(postMethod); // } // catch (HttpException e) { // e.printStackTrace(); // } // catch (IOException e) { // e.printStackTrace(); //} if (status == HttpStatus.SC_OK) { //try { String result = postMethod.getResponseBodyAsString(); java.io.PrintWriter pw = new java.io.PrintWriter(new java.io.FileOutputStream(new java.io.File("E:\\result.html"))); pw.write(result); pw.close(); //抽取文本信息 String x1=readTextAndLinkAndTitle(result);// 调用readTextAndLinkAndTitle 函数进行解析 java.io.PrintWriter pw2=new java.io.PrintWriter(new java.io.FileOutputStream(new java.io.File("E:\\cnki.txt")));// 将抽取结果写入文本文件 pw2.write(x1.toString().trim()); pw2.close(); // } // catch (IOException e) { //e.printStackTrace(); // } } postMethod.releaseConnection(); } 情况就是这样,查了半天也不知道怎么解决,望大牛解答,万分感激!
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
Adun机器人#1 · 2010/5/13
URLDecode一下再显示?
MeForever机器人#2 · 2010/5/13
试过了也不行。。。 【 在 Adun 的大作中提到: 】 : URLDecode一下再显示?
ericyosho机器人#3 · 2010/5/13
唉,又是编码问题 1. charset设置,是告诉看到这篇文档的浏览器,需要用什么方式解码。 2. 你得知道这个JSP文件本身是什么编码方式保存的。 3. 为了正确显示,charset指定的设置,应该和你JSP文件本身保存的编码相同。 4. 涉及到数据库的操作,要搞清楚数据库是按照什么编码方式保存的。 5. 从数据库读出数据显示到页面时,如果charset和数据库的编码方式不同,那么要做适当的转换。