注册 登录
编程论坛 J2EE论坛

jsp 页面的奇怪乱码!

我很幽默 发布于 2009-09-30 08:42, 1344 次点击
1我用的是 SQL server 2005 + tomcat + struts
2所有的.jsp .do 请求都有过滤器 实行统一的 UTF-8 编码。public void doFilter(ServletRequest request, ServletResponse response,
                                                      FilterChain filterChain) throws IOException, ServletException {
                                                             request.setCharacterEncoding("UTF-8");
                                                             response.setCharacterEncoding("UTF-8");        
                                                             filterChain.doFilter(request, response);
                                                            }
3在页面用EL表达式输出
4页面里<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>也为UTF-8
5查询输出部分得到的全是乱码,非查询出来的中文显示正常
6多次试验发现 在需要查询的字段前加上一个英文字母 或数字页面中文显示正常,如要查询的字段为: “你好” 改为 “a你好” 或“1你好”。
7
12 回复
#2
learnerboy2009-09-30 10:47
改为GBK
#3
lampeter1232009-09-30 11:42
GB2312
#4
qudong702009-10-09 09:42
顶!我也是同样的问题?
#5
我很幽默2009-10-09 12:40
不对 改为GB2312 GBK 同样解决不了问题, 而且项目中所有页面统一风格都是UTF-8编码!改了也不好的。谁还有高见?
#6
柠檬可乐2009-10-11 01:56
在代码开头添加一个文件如:<%@ include file="format.jsp"%>

format.jsp代码如下
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.
<html xmlns="http://www.
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<%!
public String Bytes(String str)
{
try
{
String str_1=str;
byte[] str_2=str_1.getBytes("ISO8859-1");
String bytes=new String(str_2);
return bytes;
}
catch(Exception e)
{
System.out.println("中文乱码解决问题出错"+e.getMessage());
}
return "null";
}
%>
</body>
</html>
#7
我很幽默2009-10-15 08:56
你的意思我没明白
  
    1 public String Bytes(String str)  意思是让页面加载时执行吗? str 是拿什么字符传进去?
   
    2 要是你的意思是每当要输出一个中文时用这个来转换编码?那样岂不是很麻烦?
#8
ffcamel2009-10-15 09:00
如果你是从后台得到乱码的值,那你就看看你传值的方式,有些方式会出现乱码,换种传值方式
#9
柠檬可乐2009-10-17 12:45
以下是引用我很幽默在2009-10-15 08:56:51的发言:

你的意思我没明白
  
    1 public String Bytes(String str)  意思是让页面加载时执行吗? str 是拿什么字符传进去?
   
    2 要是你的意思是每当要输出一个中文时用这个来转换编码?那样岂不是很麻烦?

不是的,只要在文件中包含这个文件就行了,比如说你的文件是index.jsp,只要在index.jsp的开头添加
<%@ include file="format.jsp"%>。当然,要在把format.jsp放在包含index.jsp的 文件夹下

传递的时候是很容易的,包含Bytes就行了,如要获取某个字段:str=Bytes(request.getParameter("str1"));

这只是获取字段的方法,其他类型的乱码乱码问题也可以解决的
#10
sweallen2009-10-17 23:31
你的应该是数据库方面的问题吧 把数据库的类型改成UTF-8就可以了
还是不要用GBK,用UTF-8比较好
#11
hyblyw2009-10-20 09:41
应该是你的数据库的编码方式可能不是UTF-8
#12
lovemm2009-10-20 15:33
public void doFilter(ServletRequest request, ServletResponse response,
 FilterChain filterChain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");         
filterChain.doFilter(request, response);
}

你把
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");        
改为
response.setContentType("text/htm;charset=utf-8");
看下可以不??
#13
我很幽默2009-12-24 17:36
谢谢大家的关注, 现在我回来公布答案,通过多次的测试我终于发现了原因:
 1 我使用的SqlServer数据库 当把字段类型改为 ntext 时就会出现乱码?而当我改为nvarchar 时所有的都显示正常了。
 2 再次提问:
           为什么 ntext 类型就会出现乱码?
1