【大拿大牛都进来吧】jsp中用超链接传递中文参数到第二页怎么接受才能不是乱码啊 都崩溃了 希望有人解答
1.jsp中代码 <a href=2.jsp?filename=中国人>点击此处</>
然后我应该怎么到第二个页面接才能接到中文啊 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
{
}
%>
1.jsp中代码 <a href=2.jsp?filename=中国人>点击此处</>
然后我应该怎么到第二个页面接才能接到中文啊 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"));
%>
上面的办法都试过了 但是还好使 出现的下载对话框是这样的2.jsp?fileName=中文.doc而不是 中文.doc
好崩溃啊 呵呵
* 对字符串进行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;
}
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>下载文件</title>
</head><body>
<center><h3>文件下载</h3></center>
<p>文件:</p>
<p>成长中淡去的几种情感</p>
<center><a href="2.jsp?fileName=成长中淡去的几种情感.doc">点击下载</a></center></body>
</html>
就这样 但是就是下载不下来啊
server.xml根本没有这一项
这里的 filenamedisplay 是已经转成中文的了.再回到浏览器的时候就乱码了。
这里要保留原来的 URL 编码格式 .就是直接 request.getParameter("fileName"); 得到的值.
<Connector
port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8" />
这里的 filenamedisplay 是已经转成中文的了.再回到浏览器的时候就乱码了。
这里要保留原来的 URL 编码格式 .就是直接 request.getParameter("fileName"); 得到的值但是我不接收值 就直接定义一个 String str="成长淡去的几种情感.doc" 就好用
我就是在1.jsp 2.jsp 同目录下建一个文件夹upload
然后把upload里面随便放一个word文档 成长中逐渐淡去的几种情感.doc
然后下在它 但就是不行 提示我保存的时候总出现乱码 然后按保存就说找不到指定路径
<% 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-downloadfilenamedisplay = 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
{}
%>
试试
总之你可以试一试java.net.URLEncoder.encode(yourStr);来对传递前的参数进行编码,针对不同的web服务器要有不同的编码,还不行就用
类似 String str = java.net.URLEncoder.encode(param,"GBK");
String newStr = java.net.URLDecoder.decode(str,"ISO8859_1");这样来遍解码,总有一种转换对你的软件环境是正确的!
{
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; 这个都可以解决.
中间的类是可以做一个类,以后只要调用就行了.
加到你的第一个网页上应该就没问题了
试试
这样,即使用formbean封装了,也可以转码
二、表单提交中文时出现乱码
通过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
收:request.getParameter("filename"));
<Connector
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
同时把其中的注释去掉,再重启编绎
这是我写的方法,楼主可以试试
String insql(String str){
try
{
String temp_p=str;
byte[] temp_t=temp_p.getBytes("ISO8859-1");
String temp=new String(temp_t,"UTF-8");
return temp;
}
catch(Exception e)
{
}
return "null";
}