[100分]大家帮我看下这个乱码是那里产生的?

shizheng1983 2010-03-17 02:48:50
和万网做接口对应,结果发现发过去的参数有乱码,

由于这个JSP是万网提供的看的我似懂非懂,不太明白

里面无缘无故多了个乱码也一起发送出去了,现在希望找到这个乱码是什么时候产生的,删除他即可(或者不产生乱码即可)


下面是JSP文件,这个放在工程下,浏览下在TOMCAT的控制台就能看到这个乱码,希望有高手帮我测试下看下问题

解决后100分送上




<%@ page contentType="text/html;charset=gbk" pageEncoding="gbk" import="java.util.*,java.net.*,java.io.*"%>
<%
//获得表单所有的参数名称
Enumeration param_names = request.getParameterNames();
//定义一个hash,将所有参数与对应值保存的这个hash中
Hashtable hash_data = new Hashtable();
//遍历参数并保存在hash中
while(param_names.hasMoreElements()) {
String name = (String)param_names.nextElement();
String value = request.getParameter(name);
hash_data.put(name,value);
}
//创建一个表单发送对象
FormPoster poster = new FormPoster(hash_data);
out.write("正在发送数据....<br>");
try {
//发送并取得响应
String responseStr = poster.post();
out.write("发送成功.<br>");
out.write("接收的数据:<br>");
out.write("<pre>" + responseStr + "</pre>");
}catch(Exception e ){
//exception deal
System.out.println(e);
out.write("发送数据失败:<br>" + e.getMessage());
}
%>
<%!
class FormPoster {
private Hashtable data = null;
private String post_url="http://api.hichina.com:8081/wwwnetcn.aspx"; //api 的地址以万网最终公布的为准
private String userid = "20645116";
private String passwd = "1111";
private String email="test@net.cn";
private String encoding = "GB2312";
public FormPoster(Hashtable postData){
this.data = postData;
}
public String post() throws IOException , Exception {
addExtendInfo();
URL url = new URL(post_url);
if(!url.getProtocol().toLowerCase().startsWith("http")) {
throw new IllegalArgumentException ("Posting only works for http URLs");
}
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(),encoding);
Enumeration names = data.keys();
while(names.hasMoreElements()) {
String name = (String)names.nextElement();
String value = (String)data.get(name);
String pstr=URLEncoder.encode(name,encoding) + "=" + URLEncoder.encode(value,encoding) + "\r\n";
System.out.print(pstr);
writer.write(pstr);
}
writer.write("\r\n");
writer.flush();
writer.close();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer resContent = new StringBuffer();
String line;
while ( (line = reader.readLine()) != null) {
resContent.append(line).append("\r\n");
}
reader.close();
return resContent.toString();
}
private void addExtendInfo () {
data.put("userid",userid);
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyyMMddHHmmss");
String current_time = format.format(new Date());
data.put("vtime",current_time);
byte[] auth_info = md5(userid+passwd+email+current_time);
System.out.println(new String(auth_info));
if(auth_info != null)
data.put("userstr",new String(auth_info));
}
private byte[] md5(String s) {
try {
java.security.MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
return digest.digest();
} catch (java.security.NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
}
%>
...全文
132 点赞 收藏 21
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
youlaiyouwang 2010-03-17
[Quote=引用 17 楼 shizheng1983 的回复:]
谢谢大家已经解决,



System.out.println(new String(auth_info));

这句话注释掉就可以了

我给大家散分
[/Quote]

这个不算解决吧?? 你加上后,在控制台不还是乱码。。。 把 System.out.println(new String(auth_info)); 转码就可以了。
回复
luohuayh 2010-03-17
我测试的页面显示都很正常,你说的控制台里的乱码估计是你输出到控制台里的,检查你的输出语句,看是否是输出语句的问题,这是我本来要给你的答案,可是晚了那么一点点你就自己发现问题了,恭喜LZ喽!
回复
luohuayh 2010-03-17
我还在找原因你就散分啦,汗!
回复
ladybirds2008 2010-03-17
[Quote=引用 17 楼 shizheng1983 的回复:]
谢谢大家已经解决,



System.out.println(new String(auth_info));

这句话注释掉就可以了

我给大家散分
[/Quote]被你抢先啦
回复
shizheng1983 2010-03-17
谢谢大家已经解决,



System.out.println(new String(auth_info));

这句话注释掉就可以了

我给大家散分
回复
统一编码
回复
是不是你的浏览器设置的问题,选择 “表示 编码 (Unicode-8)”
回复
shizheng1983 2010-03-17
恢复9楼的兄弟,你的那个方法,应该只对JSP网页上的乱码有效,而我现在这个是TOMCAT控制台上的有乱码,我试了你的方法没有解决问题

回复10楼的兄弟,你的123都试了,问题依旧,后来你说实在不行就需要转码
但是想来想去因为没有接收参数都是JSP本身的变量,所以对接收的参数实现编码应该是没有意义的

回复12楼的哥哥`~~我没有用工具,一个简单的JSP,把他放到TOMCAT/WEBAPPS/ROOT下就可以直接浏览访问了,但是这个东西在TOMCAT控制台上莫名其妙的多了句乱码,闹心呀


搞了几天把所有的空格,注释都去掉还是有句乱码
最可恶的是,通畅情况下乱码都是接入参数的时候有乱码,现在的这个乱码,根本在JSP里就没有,JSP里几乎全是代码,变量也没几个,就是不知道这个乱码是从什么地方冒出来的

无从下手
回复
cangbai217 2010-03-17
把你开发工具的语言改成GBK,试试.
(还有,例如开发工具的语言设置的是GBK,但是打包机器的语言是UTF-8)
回复
shizheng1983 2010-03-17
谢谢楼上2位,我去在试下,一会给你们结果
回复
coolwzjcool 2010-03-17
1、统一使用utf-8编码。
2、将tomcat的编码也修改为utf-8,具体的修改文件是server.xml
3、将所有得到的变量进行转码:new String(str.getBytes("ISO8859-1"),"utf-8");

2和3方法只选其一即可。。


如果还是不行,就需要转码。request.setCharacterEncoding()

回复
aSysBang 2010-03-17
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1"><title>Insert title here</title>
</head>
<body>

</body>
</html>





以上是eclipse 自动生成的jsp
把 所有“ISO-8859-1” 换成你要的编码方式 就应该可以了
红色那句你写了没?
回复
天上的星星 2010-03-17
楼主,很有可能是编码问题,换成utf-8试一下吧。
回复
shizheng1983 2010-03-17
现在这个没有从别处得到参数,他是有这个功能,但是现在为了查找这个乱码,没有用这个功能,

现在直接浏览这个DEMO.JSP在tomcat控制台上有报一个乱码,头都大了
回复
在得到参数的时候,request.setCharacterEncoding()先试试看,有可能是你的系统默认字符和他那边的不一样,先统一字符标准再说。
回复
shizheng1983 2010-03-17
xdjm,别光路过,帮我看看那乱在什么地方呀~~~
回复
NickCheng 2010-03-17
路过,接分~~~~~~~~~~
回复
xiaohuanjie 2010-03-17
回复
shizheng1983 2010-03-17
这里统一过,没有效果的

请高人继续指点下
回复
tuo_bing 2010-03-17
charset=gbk" pageEncoding="gbk"

private String encoding = "GB2312";

统一编码 。。。
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-03-17 02:48
社区公告
暂无公告