当前页面: 开发资料首页 → JSP 专题 → 【大拿大牛都进来吧】jsp中用超链接传递中文参数到第二页怎么接受才能不是乱码啊 都崩溃了 希望有人解答
【大拿大牛都进来吧】jsp中用超链接传递中文参数到第二页怎么接受才能不是乱码啊 都崩溃了 希望有人解答
摘要: 【大拿大牛都进来吧】jsp中用超链接传递中文参数到第二页怎么接受才能不是乱码啊 都崩溃了 希望有人解答
【大拿大牛都进来吧】jsp中用超链接传递中文参数到第二页怎么接受才能不是乱码啊 都崩溃了 希望有人解答
1.jsp中代码 点击此处>
然后我应该怎么到第二个页面接才能接到中文啊 2.jsp 具体代码如下
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*,java.net.*" errorPage="" %>
<%
String luanma=request.getParameter("fileName");
String str=new String(luanma.getBytes("ISO-8859-1"),"GBK");
String filenamedownload = "/upload/"+str;
String filenamedisplay =str;
response.setContentType("application/x-download");//设置为下载application/x-download
filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);
try
{
RequestDispatcher dispatcher = application.getRequestDispatcher(filenamedownload);
if(dispatcher != null)
{
dispatcher.forward(request,response);
}
response.flushBuffer();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
}
%>
<%!
public String codeToString(String str)
{
String s=str;
try{
byte tempB[]=s.getBytes("ISO-8859-1");
s=new String(tempB);
return s;
}
catch(Exception e)
{
return s;
}
}
%>
<%
String xxxx= codeToString(request.getParameter("xxxx"));
%>
不大对,我仔细看了下你的代码,你String filenamedisplay =luanma;试试看
中文问题。个人觉得还是utf-8比较好。注意检测你保存文件的似乎的文件格式是不是和你在页面总写的一致。
难道你说“%E5%88%A0%E9%99%A4“”这个为乱码。。。
你的代码看起来没有问题
中文问题。个人觉得还是utf-8比较好。注意检测你保存文件的似乎的文件格式是不是和你在页面总写的一致-----------------?没看明白
上面的办法都试过了 但是还好使 出现的下载对话框是这样的
2.jsp?fileName=中文.doc
而不是 中文.doc
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*,java.net.*" errorPage="" %>
这个应该没问题吧 不会有什么代码设置冲突吧 希望帮帮忙 弄一下午了
好崩溃啊 呵呵
在Tomcat 服务器Server.xml 里配置URIEncoding="UTF-8"
页面链接encode,取的时候decode
/**
* 对字符串进行base64编码,主要用于网页汉字拼url
*
* @param s 待编码字符串
* @return
*/
public static String encodeBase64(Object o){
String s = nvl(o);
s = (new sun.misc.BASE64Encoder()).encode(s.getBytes());
s = URLEncoder.encode(s);
return s;
}
/**
* 对字符串进行base64解码
*
* @param s 待解码码字符串
* @return
*/
public static String decodeBase64(Object o){
String res = "";
String s = nvl(o);
BASE64Decoder base64 = new BASE64Decoder();
try {
res = new String(base64.decodeBuffer(s));
} catch (IOException e1) {
e1.printStackTrace();
}
return res;
}
无端出来这么两个函数我应该怎么用啊?
1.jsp代码如下
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
下载文件</head>
<body>
文件下载
文件:
成长中淡去的几种情感
点击下载</body>
就这样 但是就是下载不下来啊
"在Tomcat 服务器Server.xml 里配置URIEncoding="UTF-8"
server.xml根本没有这一项
对中文参数进行URL编码一下就行吧。
>点击此处
获取时使用:request.getParameter("filename").getBytes("ISO8859_1")
说不能从byte 转换成String
"获取时使用:request.getParameter("filename").getBytes("ISO8859_1")"
这里你搞错了一个地方.
response.addHeader("Content-Disposition","attachment;filename=" + luanma);
这个 response.addHeader 的 attachment:filename= 这个不能用 filenamedisplay .
这里的 filenamedisplay 是已经转成中文的了.再回到浏览器的时候就乱码了。
这里要保留原来的 URL 编码格式 .就是直接 request.getParameter("fileName"); 得到的值.
server.xml
port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8" />
这里你搞错了一个地方.
response.addHeader("Content-Disposition","attachment;filename=" + luanma);
这个 response.addHeader 的 attachment:filename= 这个不能用 filenamedisplay .
这里的 filenamedisplay 是已经转成中文的了.再回到浏览器的时候就乱码了。
这里要保留原来的 URL 编码格式 .就是直接 request.getParameter("fileName"); 得到的值
但是我不接收值 就直接定义一个 String str="成长淡去的几种情感.doc" 就好用
真不知道为什么 大家有时间也建立一个看看
我就是在1.jsp 2.jsp 同目录下建一个文件夹upload
然后把upload里面随便放一个word文档 成长中逐渐淡去的几种情感.doc
然后下在它 但就是不行 提示我保存的时候总出现乱码 然后按保存就说找不到指定路径
修改为:
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*,java.net.*" errorPage="" %>
<%
request.setCharacterEncoding ("GBK");
String luanma=request.getParameter("fileName");
String str=new String(luanma.getBytes("ISO-8859-1"),"GBK");
String filenamedownload = "/upload/"+str;
String filenamedisplay =str;
response.setContentType("application/x-download");//设置为下载application/x-download
filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);
try
{
RequestDispatcher dispatcher = application.getRequestDispatcher(filenamedownload);
if(dispatcher != null)
{
dispatcher.forward(request,response);
}
response.flushBuffer();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
}
%>
试试
不知道楼主试没试 我到是试了楼上的办法 但是好像还不好使
我想了个这种的办法 你传文件的id号 然后到数据库里去找对应的文件
然后在下载 呵呵 不知道这个主义怎么样 但是明显违反了楼主的意愿 呵呵
使用 URLEncoder.encode 方法对消息进行编码 (URLDecoder.decode 方法可以用于解码)
总之你可以试一试java.net.URLEncoder.encode(yourStr);来对传递前的参数进行编码,针对不同的web服务器要有不同的编码,还不行就用
类似 String str = java.net.URLEncoder.encode(param,"GBK");
String newStr = java.net.URLDecoder.decode(str,"ISO8859_1");这样来遍解码,总有一种转换对你的软件环境是正确的!
String r_user=new String(request.getParameter("r_user").getBytes("8859_1"),"GB2312");
public static String charConvert(String strSource)
{
if (strSource == null)
{
return "";
}
else
{
try
{
//return new String(strSource.getBytes("GB2312"), "ISO-8859-1");
String str = new String(strSource.getBytes("ISO-8859-1"), "GB2312");
System.out.println(str);
return str;
}
catch (Exception ex)
{
System.out.println(ex.toString());
return "";
}
}
}
tt="中文";type = URLEncoder.encode(tt);XXX.jsp?num=type;
以前碰到过
String r_user=new String(request.getParameter("r_user").getBytes("8859_1"),"GB2312");
用这个和tt="中文";type = URLEncoder.encode(tt);XXX.jsp?num=type; 这个都可以解决.
中间的类是可以做一个类,以后只要调用就行了.
试试下载这样的中英文都带的文件名吧。 中国abc成长中淡去的几种情感.doc
然后试试将这样的文件放在下级目录。再用楼主的方法下载。
<% request.setCharacterEncoding("gb2312");%>
加到你的第一个网页上应该就没问题了
试试
最好的方法,应该加一个中文转码的过滤器
这样,即使用formbean封装了,也可以转码
谢谢大家的热情帮助 真的非常感谢
上面有的方法在我的机器上好使 但到别人的机器就好使了
有的在别人的机器上好使 但到我的机器上就不好使了 呵呵
都给我弄崩溃了反正不关怎么样 都要谢谢大家 真的有点感动 呵呵
一、JSP页面显示乱码 在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>
二、表单提交中文时出现乱码
通过request.setCharacterEncoding("gb2312")对请求进行统一编码,就实现了中文的正常显示。修改后的process.jsp代码如下:
<%@ page contentType="text/html; charset=gb2312"%>
<%
request.seCharacterEncoding("gb2312");
%>
三、数据库连接出现乱码
只要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK就OK了。
四、数据库的显示乱码
在mysql4.1.0中,varchar类型,text类型就会出现中文乱码,对于varchar类型把它设为binary属性就可以解决中文问题,对于text类型就要用一个编码转换类来处理,实现如下:
public class Convert {
/** 把ISO-8859-1码转换成GB2312
*/
public static String ISOtoGB(String iso){
String gb;
try{
if(iso.equals("") || iso == null){
return "";
}
else{
iso = iso.trim();
gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
return gb;
}
}
catch(Exception e){
System.err.print("编码转换错误:"+e.getMessage());
return "";
}
}
}
把它编译成class,就可以调用Convert类的静态方法ISOtoGB()来转换编码。
以上信息 来自
http://blog.csdn.net/wangyun71/archive/2005/12/14/552534.aspx
用hidden传参试试,编码确实是很烦的问题
传:"2.jsp?filename="+URLEncoder.encode("中国人","UTF-8")
收:request.getParameter("filename"));
在接收页面用以下代码接受 参数:
String fname=request.getParameter("name");
//name是参数名
fname=new String(fname.trim().getBytes("ISO8859_1"),"***");
// *** 处填写你所希望转换成的编码 可以是 UTF-8,GBK 等等
用的好的话记得给分
server.xml
port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="GBK" />
这是部署阶段..
如果是在JBUILDER中开发
则改文件
项目名/Tomcat/conf/server8080.xml
同时把其中的注释去掉,再重启编绎