[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;
}
}
%>
...全文
169 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
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));

这句话注释掉就可以了

我给大家散分
  • 打赏
  • 举报
回复
统一编码
zdy32032319861105 2010-03-17
  • 打赏
  • 举报
回复
是不是你的浏览器设置的问题,选择 “表示 编码 (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";

统一编码 。。。
[2010.10.14][封装工具][天空作品] Easy Sysprep v3 RC3(+ SkySRS3.00) 来源:自由天空技术论坛,原文链接:http://sky123.org/thread-26640-1-1.html Easy Sysprep v3 简介 1、欢迎使用 (1)ES3目前支持WinXP x86、Win7 x86和Win7 x64的封装。早期测试阶段不支持其他系统的封装。 (2)ES3欢迎界面会向用户提示系统相关各信息,一目了然。 (3)如果ES3的检测信息与您系统内容不相符,请注意反馈。 2、配置文件加载 (1)ES3能够记录您的操作习惯,能够让您快速的恢复以前的选择项目。 (2)ES3会自动保存配置文件到ES3同层目录下,方便您的存放。 (3)如果您本次的操作与之前的操作相似或相同,您可以直接加载以前的配置方案,一切选项会自动为您重新加载! 3、任务选择 (1)为了同时兼顾新手和老手,ES3采用可选任务的向导模式。 (2)如果您是高手,您可能只需要这些任务中的1~3个,如“驱动处理”、“封装部署选项”、“部署任务设定”。 (3)如果您是新手,您可能需要更多的向导项目辅助您的操作,那您可以根据自己的需要多选几个。 (4)选择任务后,您不需要的任务不会出现干扰您的思路。 (5)向导模式最大限度的展现功能,并协助您步步为营的完成各个操作,是人性化的体现。 (6)不是所有选项都是您必须选用的,请根据自己的实际需要选择。 (7)除了可选向导,ES3还提供了树状结构显示各任务,您可以通过单击树状结构相关任务项目直接在各任务间跳转! 4、补丁安装 (1)ES3的补丁安装功能支持Windows系统补丁和微软Office补丁的安装。 (2)ES3的补丁安装功能具备一定的智能识别能力,能够智能判定当前系统和补丁的匹配关系,但您最好能将您的补丁类,以防万一。 (3)如果您是“纯净封装”的追求者,不连接网络、不使用360安全卫士、不使用补丁包,那这个功能一定是您的好手。 5、注册表优化 (1)ES3提供了可视化更好的注册表优化功能,您可以选择导入您的注册表优化方案,ES3会截取您优化方案中的一部供您审阅。 (2)ES3自带一套XP的优化方案,目前尚无WIN7的优化方案,择日补充。 6、服务优化 (1)ES3相比ES2的服务优化可视化更高、自定义性更强,可以精确到每一个服务的设定; (2)您可以通过右键设定每个服务的工作状态,更可以直接查看每个服务的详细信息; (3)ES3自带一套XP的优化方案,目前尚无WIN7的优化方案,择日补充。 (4)您可以选择“全部设置为推荐”,一键优化所有服务,十方便! 7、个性化信息 (1)ES3提供了基本的个性化信息设定功能,如果您没有太高的个性化信息设定要求,这个界面应该能满足您的基本需要。 (2)ES3支持随机的计算机名设定,并提供前缀模式([自定义名]-[时间][随机英文])的计算机名设定。 8、封装任务设定 (1)如果您在封装前后(注意,不是部署前后)有某些工作要做,而又经常忘记,那就把他们加入到ES3里吧,ES3会协助您完成这些任务。 (2)任务添加方法:先写入任务,后单击“添加”按钮。 9、设备驱动处理 (1)ES3提供完善的驱动卸载方案,能够自动化的您去除本机硬件设备驱动信息,以提高部署的成功率,减少源计算机信息残留。 (2)ES3为您提供可视化程度更高的设备查看功能,您可以通过树状支查看每个设备的硬件ID信息。 (3)自动为您处理硬件抽象层(HAL),提高系统部署可适用范围。 10、常规封装部署任务设定 (1)为方便用户,这个界面集中提供常用的封装部署任务设定。 (2)测试阶段某些功能未开放,有些任务不适用于您当前的系统,这些任务会自动处于禁用状态。 (3)ES3支持添加部署背景(WIN7暂不支持),且提供多背景切换功能,支持“%x%”盘符,即到各硬盘内自动搜索图片。 (4)ES3可以直接加载自由天空SkySRS系列磁盘控制器驱动。 11、高级封装部署任务设定 (1)这里您可以进一步设置各封装部署选项。 (2)资料转移功能,转移常见个人资料到非系统盘,如果判定到目标盘不可用则不执行转移工作。 (3)IP设定功能,让您快速的配置适合您网络环境的常用网络项目。 (4)其他小功能,方便您的日常操作。 12、部署任务设定 (1)ES3提供十强大的任务设定方案。 (2)理论上支持无限个调用,不受调用任务数目限制。 (3)支持调用常见可执行文件:exe、cmd、bat,支持直接调用注册表文件:reg。(不支持msi的调用,部署时可能会产生不正常) (4)提供常见任务的自定义调用。 (5)支持直接将7Z转化为EXE文件,并配以漂亮的解压界面,且可以根据您的设定完全自动化解压到某位置。 13、完成 (1)ES3提供将您的操作习惯保存起来的功能。 (2)由于ES3的配置文件比较复杂,为了让用户修改配置文件更加容易,ES3提供了修改配置文件但不执行封装操作的功能。 (3)修改配置文件经常要用记事本看复杂抽象的信息,易出错,所以才提供了(2)中所示功能,可以让您直接使用ES3的图形界面对配置文件进行设定! (4)将首页设为 http://www.2345.com/?751 可以为天空联盟带来收益,但这个您是可选的,不是强制绑定的。尊重您的选择权。 Easy Sysprep v3 严格遵循天空的三阶段测试条例: Beta1阶段,测试ES3的基本功能,如基本自动化封装功能、基本部署控制功能。这个阶段的ES3只具备全部功能的30%~40%。 Beta2阶段,加入为ES3设计的各项新功能,并进一步完善SRS驱动等必要项目。这个阶段的ES3具备全部功能的40%~70%。 Beta3阶段,加入为ES3设计的辅助功能,如更漂亮的部署过程,更完善的助文档等。这个阶段的ES3具备全部功能的70%~90%。 RC阶段,全功能放出并进行最后的完善。这个阶段的ES3具备全部功能的90%~100%。 [2010.5.9] Easy Sysprep v3 Beta 2.9 1、修正XP开始菜单OEM设置中,误将链接说明作为链接名称的问题 2、修改WIN7配置文件与B2.7相同,使用微软官方提供的方法将Admin用户的配置文件配给所有用户,避免WIN7部署后进桌面无桌面背景的问题 3、注意,请勿在Win7封装时将系统非法激活,因此原因造成的部署中报错问题,ES3不予解决 4、注意,精简过的、大量修改过的Win7封装或部署中出现过的各种问题,ES3不予解决 5、再次重申,原版Win7的Syprep.exe 3.14在运行时同样具有一定的失败率,别将所有责任都推到ES3身上 6、更改XP部署模式,最后加入一个强制重启功能,避免系统因程序执行完毕判定失误而造成的部署后无法自动重启的问题 7、更改XP部署模式,HAL自动判定消除的时机由部署前调整至部署后 8、配合EzDrv和天空驱动包,自动将无线网卡驱动延迟到进桌面安装,避免因无线网卡驱动问题造成的部署中卡机、黑屏问题 9、特别声明,更新8必须有EzDrv和天空驱动包配合 10、更新SRS驱动到SkySRS2.89,增强WinXP/7对AMD 8系列主板的支持,提高Win7部Intel系列主板的支持 [2010.5.15] Easy Sysprep v3 Beta 3.0 1、很欣慰的说,终于进入第三测试阶段了,本阶段将以查缺补漏、美化和添加助文档为主 2、修正部署侧边栏不随辨率变化而自调整的BUG,修正后当部署辨率因显卡驱动安装而出现跳动时,侧边栏会自适应这些变化 3、修正部署进度条不随辨率变化而自调整的BUG,修正后当部署辨率因显卡驱动安装而出现跳动时,进度条会自适应这些变化 4、加入ES2中已成熟的,在Beta2阶段取消的部署辨率锁定功能 5、XP部署过程,加入Win7_Aero主题美化,使部署过程更养眼,效果参见:http://sky123.org/thread-37111-1-1.html [2010.5.30] Easy Sysprep v3 Beta 3.1 1、加入部署阶段外挂皮肤可选功能,目前加入了多种Aero主题效果,说明详见:http://sky123.org/thread-38217-1-1.html 2、修正部署背景可随部署辨率变化而变化,此问题可能会造成部署跳辨率时背景显示不全屏的问题 3、加入基本的Win7部署背景修改功能,支持Win7部署背景多图切换,但此功能尚不十完善,待进一步开发 4、加入多系统支持,修正后支持: (1)32位,Windows XP (2)32位,Windows Server 2003,包括R2版 (3)32位,Windows 7 (4)64位,Windows 7 (5)64位,Windows Server 2008 R2 5、由于SRS驱动的问题,尚未加入多种服务器专用磁盘控制器的驱动,所以虽支持对服务器系统的封装,但对服务器的兼容性尚待SRS驱动方面的加强 [2010.6.5]Easy Sysprep v3 Beta3.2 1、加入新版辨率自动设定程序,对LCD的正确率较高,CRT一般 2、修正自定义注册表优化不能保存的问题 3、增加部署进度条计时功能 4、修正部署进度条“1”、“2”、“3”、“4”字体大小问题 5、包含最新的SkySRS2.91,尽可能修正SIS芯片组部署问题 6、透明皮肤排除设备管理器、任务管理器、注册表编辑器 7、部署辨率默认修改为“1024 x 768” 8、修正SRS部VIAIDE残留问题 9、调整用于Windows Server 2003的Sysprep程序组,避免出现部署后非系统区不自动配盘符等问题 [2010.7.18] Easy Sysprep v3 Beta3.6 1、加入多语言支持,支持简体中文、繁体中文、英文,ES3会自动切换并适应系统语言 2、英文系统暂不支持部署侧边栏和部署进度条,透明效果在英文系统下有些小故障 3、增加部署任务设定的参数显示 4、计算机名自动转大写,避免因计算机名大小写问题引起的MSSQL安装失败问题 5、更新年份锁定功能,以AU3函数实现 6、更新Notepad2到V4.1.24 Final版 7、更新辨率自动设定程序到7月8日版 8、修正XP HOME版封装失败判定条件的错误,此问题会引起HOME下错误判定封装失败 9、DllCacheRecover更新多语言支持 10、XP封装时,自动重置激活期限,零售版、OEM版封装后激活时间自动恢复到30天,VOL版不受影响 [2010.8.5] Easy Sysprep v3 Beta3.7 1、测试7z自解压部功能,修正标题和描述在多语言支持加入后无法修改的问题 2、修正封装前任务立即执行时,进度显示乱码问题 3、修正系统快速转移模式下,Sysprep文件夹无故消失问题 4、重写ADSL链接创建程序,支持多语言 5、修正ADSL链接创建提示在多语言支持加入后显示不完全的问题 6、修正Win2003/2008下SRS驱动未正常导入问题,可能引起此两款系统部署时蓝屏 7、修正Outlook Express部署后无法保存密码的问题 8、修改配置文件打包方法 9、封装后删除WINDOWS\ES3目录中无用的文件和程序 [2010.8.18]Easy Sysprep v3 RC 1、如发现无Windows\Repair文件夹,则新建一个,减少XP封装失败几率 2、增加助文档,让大家更了解ES3功能 3、按照坛友反馈,修正部繁体中文和英文文字 4、使用ES3安装补丁后提示用户重启以完成补丁安装,重启后再次运行ES3主程序封装会继续执行 5、禁用Windows Server 2003下使用系统快速转移模式 6、Windows Server 2003部署后使用系统命令自动配盘符,解决个别条件下部署Win2003后无盘符问题 [2010.9.13]Easy Sysprep v3 RC2 1、相对于RC版本,代码几乎无改动 2、增加一个对MS-Office2003的修正功能,对部署后Office问题有一定的修正能力,但仍建议选择优秀的Office修改版本从而可彻底避免此问题 3、感谢Canon提供的2中所述的修正程序 4、整合SkySRS2.99,增强部署兼容性和稳定性 [2010.9.26]Easy Sysprep v3 RC3 1、相比RC2,主程序代码无任何改动 2、由于发现Officefix.exe存在一定问题,所以在RC3中取消由RC2时加入的Office修正程序 3、RC3的Files中仍有Officefix.exe程序,但已经更替成为了一个没有实际功能的占位程序,目的是为了方便以后更新 4、如无意外,RC3今后将作为Final版发布 再次重申报毒问题,封装软件肯定涉及系统深层的东西,还会修改部系统文件与系统服务,被误报纯属正常(被某些国产杀毒误报就更正常不过了),微软官方杀毒没把ES3中任何一个文件当做病毒,大家可以自己尝试。请在下载后核对MD5,确认自己下载的的确是原版。

81,090

社区成员

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

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