本文目录一览:
- 1、jsp页面获取中文乱码怎么解决方法
- 2、jsp网页下载文件出现中文乱码,我的下载超链接指向文件,如果文件名是英文,就下载正常,如果文件名是
- 3、怎么解决jsp中文乱码问题,我要疯了
- 4、jsp页面下载链接出现乱码
- 5、jsp用a标签下载文件,中文出现乱码怎么解决?
jsp页面获取中文乱码怎么解决方法
1、在jsp页中加入一条语句:
%@ page contentType="text/html;charset=gb2312" %中文显示就正常了。
2、对于从网页中的文本框通过String parameter = request.getParameter(“parameter”);方式获得的字符串,均是8859_1的编码,
如果想把它显示在网页上就必须得用parameter = new String(parameter.getBytes(“8859_1”),”gb2312”)进行转换,windows和linux这两种系统都是一样的。
有一个简单方法,就是在 getParameter() 方法获取参数之前,使用request.setCharacterEncoding("GB2312");,将提交的信息转化为 GB2312 编码。
3、但是对于将数据写入数据库的问题,采取的方式就不同了:
windows下,必须要采用该字符串转换再插入数据库,而linux下就不需要,而是直接把8859_1编码的字符插入。
如果从数据库中读出的数据,对于windows因为在插入时已经做了转换,所以读出时已经是gb2312的,当把它显示在网页上时,不需要做编码转换,而 linux上的mysql中的数据是8859_1的所以要做编码的转换。
4、 如果你给某个字符串变量赋予一个中文字符串的值,那么在你取出他时,在网页上的显示是不需要做字符转换的,
但是如果你要在linux下做字符的比较,则还需要把字符做parameter = new String(parameter.getBytes(“gb2312”),”8859_1”)的转换。
5、长江电力网站解决中文问题的方法是:
1)在catalina.sh文件中的相关位置添加下面一行
-Dfile.encoding=GBK \
2)在每个jsp文件的最前面添加下面两行
%@ page contentType="text/html; charset=GBK" %
%request.setCharacterEncoding("GBK");%
jsp网页下载文件出现中文乱码,我的下载超链接指向文件,如果文件名是英文,就下载正常,如果文件名是
超链接的地址使用js自带的解码函数解码
若1还不行就在tomcat的server.xml文件里加上这个
怎么解决jsp中文乱码问题,我要疯了
1、JSP页面出现的中英文乱码:
我们的PageCharset.jsp页面代码如下所示:
[html] view plain copy
%@ page language="java" import="java.util.*"%
html
head
title中文显示示例/title
/head
body
中文显示的示例。
%
out.print("这里是用jsp输出的中文");
%
/body
/html
当我们在保存我们的文件的时候会出现下面的提示:
整因为在我们的MyEclipse中默认的编码为ISO-8859-1,而ISO-8859-1不支持中文的编码,所以jsp页面代码如果出现中文就不能保存了。对于这样的错误,我们只要在页面上加上支持中文的编码格式就可以了,在jsp页面中加上pageEncoding=“gb2132” 支持中页面的编码格式就可以了。这样我们就能正常保存我们的jsp源文件了。
2、URL传递参数中文乱码
[html] view plain copy
%@ page language="java" import="java.util.*" pageEncoding="gb2312"%
html
head
titleURL传递参数中英文处理示例/title
/head
%
String param = request.getParameter("param");
%
body
a href="URLCharset.jsp?param='中文'"请单击这个链接/a
您提交的这个参数为:%=param %
/body
/html
启动tomcat运行结果出现url传递的中文乱码:
这里我们需要配置tomcat服务器文件,才能解决这个问题。具体方法是,在tomcat的conf目录下找到server.xml配置文件,找到如下代码
[html] view plain copy
span style="font-size:18px" Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" //span
在后面添加上编码方式,URIEncoding="gb2312" 重新启动tomcat问题就解决了。
3、表单提交中问乱码
对于表单中提交的数据,可以用request.getPraramter("");方法来获取,但是当表单中出现中文数据的时候就会出现乱码。
我们的提交表单的页面,FormCharset.jsp页面如下:
[html] view plain copy
%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%
!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""
html
head
meta http-equiv="Content-Type" content="text/html; charset=GB18030"
titleForm中文处理示例/title
/head
body
下面是表单内容:
form action="AcceptFormCharset.jsp" method="post"
用户名:input type="text" name="userName" size="10" /
密 码:input type="password" name="password" size="10"/
input type="submit" value="提交"/
/form
/body
/html
我们的AcceptFormCharset.jsp页面:
[html] view plain copy
%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%
!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""
html
head
meta http-equiv="Content-Type" content="text/html; charset=GB18030"
titleForm中文处理示例/title
/head
body
下面是表单提交以后request取到的表单的数据:br
%
out.println("表单输入的userName值为:" + request.getParameter("userName") +"br");
out.println("表单输入的pasword值为:" +request.getParameter("password") + "br");
%
/body
/html
提交表单:
结果如下:
我们看到我们在表单中的中文数据出现了乱码,为什么楚翔这种情况呢?是因为我们的tomcat中,对于以post方式提交的表单编码格式默认为ISO-8859-1的编码格式,而这种编码格式是不能编码中文的,所以就会出现乱码的现象了。对于这种情况,我们可以对表单中的数据进行处理,在取得表单参数的时候设置编码方式,我们更改了我们的接受表单数据的页面如下所示:
[html] view plain copy
%
String userName = request.getParameter("userName");
String passWord = request.getParameter("password");
out.println("表单输入的userName值为:" + new String(userName.getBytes("ISO-8859-1"),"gb2312")+"br");
out.println("表单输入的pasword值为:" + new String(passWord.getBytes("ISO-8859-1"),"gb2312")+"br");
%
这样就得到我们想要的效果啦:
4、数据库操作中文乱码
我们在建立数据库的时候,最好是能选择支持中文编码格式,最好是能和jsp页面编码格式保持一致,这样就尽可能的减少数据库操作中文乱码的问题,最开始的连接数据库的时候,编写好数据库的编码策略,也就是使用这种形式的URL:jdbc:Oracle:thin:@localhost:1521:TEST;userEnicode=true;characterEncoding=gb2312; 这样我们选择的数据库的编码和我们的jsp编码就一致了。
写入到数据库的时候,数据库中中文乱码:
但是如果我们在最开始的时候没有对数据库的编码进行设置,并且我们的数据库中已经有大量的数据的话,我们再向数据库中写入中文数据,数据库中的中文显示为乱码。在写入数据的时候出现乱码,是因为我们在处理表单的时候没有对字符的编码设置,对于这种情况,我们在jsp中或servlet中加入:
rquest.setCharacterEncoding("gb2312");//处理表单请求的时候设置编码。
这样再看我们的数据库,插入的中文字段就不会乱码了。
从数据库中读出中文乱码:
数据库中的中文出现乱码,就是在读取数据库的时候进行转码,这样显示就不会乱码了。我们整理这样的一个转码函数:
public String encoder(String str) throws UnsupportedEncodingException
{
String result = new String(str.getBytes("ISO-ISO-8859-1)"),"gb2312");
}
5 在myeclipse开发工具中打开中文显示乱码
在myeclipse中默认的编码方式为ISO-8859-1,所以打开有其他编译器编码的jsp页面就会出现乱码,是因为两个编译器保存源文件编码格式不同,在UltralEdit可以支持中文,但是在Eclipse对jsp文件的保存方式为ISO-8895-1,这种编码不支持中文,所以就会出现乱码。
对于这种情况,我们可以更改myeclipse默认的编码方案,myeclipse-Window-Preferences-General-Content types-Test-JSP
这样问题就解决啦!
6 Filter批量设置编码格式
我们对于每一个jsp或servlet我们都要设置编码格式,效率有些低,我们的servlet的Filter解决了我们的问题。在前篇写过Filter的解决中文乱码问题的文章,在这里就不赘述了。
需要强调的一点,开始使用Java model1模型的时候,我们在web.xml中配置只需要配置好jsp页面就可以了,在model2模型中我们使用servlet作为控制器,我们就需要在Filter的配置文件web.xml中配置好servlet的设置,对所有的servlet处理的表单编码进行设置。
[html] view plain copy
filter
filter-nameCharsetEncodingFilter/filter-name
filter-classcom.bjpowernode.drp.util.filter.CharsetEncodingFilter/filter-class
init-param
param-nameencoding/param-name
param-valueGBK/param-value
/init-param
/filter
filter-mapping
filter-nameCharsetEncodingFilter/filter-name
url-pattern*.jsp/url-pattern
/filter-mapping
filter-mapping
filter-nameCharsetEncodingFilter/filter-name
url-pattern/servlet/*/url-pattern
/filter-mapping
jsp页面下载链接出现乱码
jsp中实现文件下载的最简单的方式是在网页上做超级链接,如:a
href="music/abc.mp3"点击下载/a。但是这样服务器上的目录资源会直接暴露给最终用户,会给网站带来一些不安全的因素。因此可以采用其它方式实现下载,可以采用:1、RequestDispatcher的方式进行;2、采用文件流输出的方式下载。
1、采用RequestDispatcher的方式进行
jsp页面中添加如下代码:
%
response.setContentType("application/x-download");//设置为下载application/x-download
String
filedownload
=
"/要下载的文件名";//即将下载的文件的相对路径
String
filedisplay
=
"最终要显示给用户的保存文件名";//下载文件时显示的文件保存名称
filenamedisplay
=
URLEncoder.encode(filedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename="
+
filedisplay);
try
{
RequestDispatcher
dis
=
application.getRequestDispatcher(filedownload);
if(dis!=
null)
{
dis.forward(request,response);
}
response.flushBuffer();
}
catch(Exception
e)
{
e.printStackTrace();
}
finally
{
}
%
2、采用文件流输出的方式下载
%@page
language="java"
contentType="application/x-msdownload"
pageEncoding="gb2312"%%
//关于文件下载时采用文件流输出的方式处理:
//加上response.reset(),并且所有的%后面不要换行,包括最后一个;
response.reset();//可以加也可以不加
response.setContentType("application/x-download");
String
filedownload
=
"想办法找到要提供下载的文件的物理路径+文件名";
String
filedisplay
=
"给用户提供的下载文件名";
filedisplay
=
URLEncoder.encode(filedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename="
+
filedisplay);
OutputStream
outp
=
null;
FileInputStream
in
=
null;
try
{
outp
=
response.getOutputStream();
in
=
new
FileInputStream(filenamedownload);
byte[]
b
=
new
byte[1024];
int
i
=
0;
while((i
=
in.read(b))
0)
{
outp.write(b,
0,
i);
}
outp.flush();
}
catch(Exception
e)
{
System.out.println("Error!");
e.printStackTrace();
}
finally
{
if(in
!=
null)
{
in.close();
in
=
null;
}
if(outp
!=
null)
{
outp.close();
outp
=
null;
}
}
%
至于你出现的问题,可能是浏览器打开了你要下载的文件,而不是保存,你点右键另存为看看能不能下载
jsp用a标签下载文件,中文出现乱码怎么解决?
我猜你说的中文出现乱码应该是文件名内的中文出现乱码。
这和服务器,本机的编码有关系吧。
应该在下载的过程中将服务器文件名编码转换一次。