0 0

SSH2整合出现中文乱码:form提交的中文数据传到了action显乱码10

    哎,被中文乱码高的晕头转向。在网上搜索的各种方法都用过,form提交的中文数据到action方法里都还是现实中文乱码。
    1在Tomcat里面的server.xml把编码改成了UTF-8。
    2在项目的属性的Resource里把Test file encoding改为UTF-8。
    3手动编写过过滤器。
    4使用过自带的编码过滤器(org.springframework.web.filter.CharacterEncodingFilter)。
    5在JSP页面里加上了<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8" %>
    6action的方法中有进行过转码:String nameUTF8=new String(admin.getName().getBytes("ISO8859-1"), "UTF-8")或者String nameUTF8=URLDecoder.decode(admin.getName(),"utf-8"),控制台打印的还是乱码。用第一个转码打印的乱码是“????”,而第二个打印的是“閭撶悊閿?”。
    7在struts.xml里也加上了<constant name="struts.i18n.encoding" value="UTF-8"/>
    在赶毕业设计,被中文乱码耽搁了进程,抑郁不能解。希望好心人士的解答。谢谢

问题补充:
ethen 写道
你可以看下,应该可以解决
http://ethen.iteye.com/blog/797775

hope it helpful to you!

我的是我也把页面上的<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">加上,但我的是form提交,struts2的action继承ModelDriven<Admin>直接admin.getName()可以得到数据,但都是中文乱码!!!好烦!!希望更多的人来解决...

问题补充:
andy_javahome 写道
把你的admin.getName()打印一下粘出来看看是什么样。

6action的方法中有进行过转码:String nameUTF8=new String(admin.getName().getBytes("ISO8859-1"), "UTF-8")或者String nameUTF8=URLDecoder.decode(admin.getName(),"utf-8"),控制台打印的还是乱码。用第一个转码打印的乱码是“????”,而第二个打印的是“閭撶悊閿?”。 
   这就是打印出来的效果

问题补充:
andy_javahome 写道
呵呵  我说让你打印没转码的 看是什么编码

好的,没转码的打印出来是“閭撶悊閿?”

问题补充:
andy_javahome 写道
呵呵  我说让你打印没转码的 看是什么编码

没转码System.out.println("action->admin.getName()="+admin.getName())打印出来的和我说的第二种转码一样String nameUTF8=URLDecoder.decode(admin.getName(),"utf-8")。


这是我的JSPUTF-8的设置和内容:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>登录页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<link href="css/login.css" rel="stylesheet" type="text/css"/>
<link rel="Shortcut Icon" href="images/chinaz1.ico" type="image/x-icon" />
<script language="JavaScript" src="javascript/login.js"></script>
<script language="JavaScript" src="javascript/position.js"></script>
</head>
<body>
<div id="container">
<div id="topimg">
<img src="/image/admin/login_main.jpg">
</div>

<div id="loginmain">
<s:form action="AdminAction!loginAdmin.action" theme="simple" method="post" onsubmit="return check();">
<table align="center">

<tr>
<td>用户名:</td>
<td><s:textfield id="name" name="name"/></td>

</tr>
<tr>
<td>密&nbsp&nbsp码:</td>
<td><s:password id="password" name="password"/></td>

</tr>


<tr>
<td colspan="2" align="center">
<s:submit value="登 录" id="submit" cssClass="loginbutton"/>&nbsp&nbsp
<s:reset value="重 置" cssClass="resetbutton"/>
</td>

</tr>
</table>
<s:textfield id="result" name="result" cssStyle="display:none"/>
</s:form>
</div>
</div>

</body>
</html>

问题补充:
andy_javahome 写道
把头改成 试一试
<%@page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

还是不行

问题补充:过滤器一:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request,response);
System.out.println("过滤器utf-8");
}
<!-- 手动编写中文乱码过滤器-->
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>dlr.co.util.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


过滤器二:
<!-- 配置核心过滤器 -->
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
  <dispatcher>REQUEST</dispatcher> 
  <dispatcher>FORWARD</dispatcher> 
  <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
  <filter-mapping>
  <filter-name>SetCharacterEncoding</filter-name>
  <url-pattern>*.jsp</url-pattern>
</filter-mapping>




问题补充:
tcl1122 写道
如果真是像楼主说的那样 所有的方法都试了 无济于事
那么楼主不妨试试将项目中的文件拷贝出来 做一下文件编码转化 然后再复制到项目里面去

具体操作在下面:
http://www.cnblogs.com/eflylab/archive/2008/07/08/1238550.html


祝你好运。


还没解决,我下载了EditPlus-v3.0.336H,转了后缀为.jsp .java .xml文件的编码为UTF-8,但还是不行。

问题补充:
andy_javahome 写道
经鉴定“閭撶悊閿?”是GBK被转化成往utf-8的结果,用new String("閭撶悊閿?".getBytes("GBK"),"UTF-8")可以将部分数据转化回来“邓理??”,但由于utf-8一个汉字占三个字节GBK则是两个字节。
怀疑你的filter里用了GBK编码。一般在web.xml配的,如果你用是MyEclipse可用ctrl+h检索一下,文件类型那用*.*  看看哪里这是了GBK或者GB2312了


我穷举打印:
System.out.println("action->admin.getName()="+admin.getName());
System.out.println("开始转码@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); System.out.println(new String(admin.getName().getBytes("ISO-8859-1"),"UTF-8"));
System.out.println(new String(admin.getName().getBytes("UTF8"),"UTF-8"));
System.out.println(new String(admin.getName().getBytes("GB2312"),"UTF-8"));
System.out.println(new String(admin.getName().getBytes("GBK"),"UTF-8"));
System.out.println(new String(admin.getName().getBytes("BIG5"),"UTF-8"));
System.out.println(URLEncoder.encode(admin.getName(),"UTF-8"));
System.out.println(URLDecoder.decode(admin.getName(),"UTF-8"));

效果如下:
action->admin.getName()=閭撶悊閿?
开始转@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
?????
閭撶悊閿?
?????
邓理??
?[??Q?L?
%E9%96%AD%E6%92%B6%E6%82%8A%E9%96%BF%EF%BF%BD
閭撶悊閿?




可以看出System.out.println(newString(admin.getName().getBytes("GBK"),"UTF-8"));打印出“邓理??”。不知你说的对不对,但我没用GBK过滤器。

问题补充:
andy_javahome 写道
经鉴定“閭撶悊閿?”是GBK被转化成往utf-8的结果,用new String("閭撶悊閿?".getBytes("GBK"),"UTF-8")可以将部分数据转化回来“邓理??”,但由于utf-8一个汉字占三个字节GBK则是两个字节。
怀疑你的filter里用了GBK编码。一般在web.xml配的,如果你用是MyEclipse可用ctrl+h检索一下,文件类型那用*.*  看看哪里这是了GBK或者GB2312了



我用的是MyEclipse8.5,怎样“ctrl+h检索一下,文件类型那用*.*  看看哪里这是了GBK或者GB2312了”,能具体一点吗

问题补充:      哈哈!终于解决了。我重新建立了新web项目,把以前的所有文件拷进去,居然成功解决了form传来的中文值。andy_javahome猜的其中一些可能是对的,之前我项目做到中途才把GBK转化为UTF-8,导致改得不彻底。现在新建项目,先改为UTF-8,再拷贝文件进去。
     接下来不用转码都可以把form传来的中文值成功打印出来。也谢谢所有一起帮我解决中文乱码的人,算是增长了知识。希望这帖可以起到帮助所有遇到我这种相同中文乱码问题的人。
    SSH2解决中文乱码总结(其他GBk等都一样吧):
    1在Tomcat里面的server.xml把编码改成了UTF-8。
    2新建立项目后,首先在项目的属性的Resource里把Test file encoding改为UTF-8。;如果你做到中途再设置的话,可能会改得不彻底。(我可能就是中途才把GBK改为UTF-8导致几天都解决不了,现在新建项目先设定为UTF-8才成功。)
    3使用编码过滤器(org.springframework.web.filter.CharacterEncodingFilter),配置如下:
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
       4在JSP页面里加上了<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
       5在struts.xml里也加上了<constant name="struts.i18n.encoding" value="UTF-8"/>
       6连接数据库的语句jdbc:mysql://localhost:3306/数据库名?useUnicode=true&amp;characterEncoding=utf-8
       7我mysql用的管理软件是Navicat,新建连接时,在”高级“里使用默认的选项,即”使用MySQL字符集“和编码是“65001(UTF-8)”。
       8在Navicat里手动创建数据库时,SQL语句建表示例:CREATE TABLE `co_admin` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  `email` varchar(20) DEFAULT NULL,
  `role` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
记得后面要加上DEFAULT CHARSET=utf8。
       9需要转码的地方在页面和页面之间通过URL传输中文数据时才需要转码:如a.jsp链接到b.jsp时,a.jsp页面要使用String name=URLEncoder.encode( nameStr, "UTF-8")编码,然后链接href="background/manager/modifyAdmin.jsp?name=<%=name%>。b.jsp要得到中文参数要转码解码,String name=new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8")解码即可。但你使用struts标签时加在链接里作为参数传输中文参数就比较困难,如a.jsp里面的链接href="background/manager/modifyAdmin.jsp?name=name=<s:property value='name'/>,这样在a.jsp里就用不了String name=URLEncoder.encode( nameStr, "UTF-8")编码,如果你用的是IE浏览器,然后b.jsp得到中文个数如果是单数的话,如“中国人”从a转到b就会变成“中国口”,个数为双数的话就不会。如果你用的是火狐就单双数中文都系那是正常。即struts2标签库作为参数放进链接(因a.jsp没编码,b.jsp解码时就不能保证),得到中文数目为单的参数时最后一个字变成类似“口”字。
       10javascript的中文乱码本人暂时还没遇到,所以没写总结。



     这样一来可以完整得解决整个项目的中文乱码问题,这样action或者业务方法等都不用转码,
   
2010年12月01日 13:25

10个答案 按时间排序 按投票排序

0 0

采纳的答案

经鉴定“閭撶悊閿?”是GBK被转化成往utf-8的结果,用new String("閭撶悊閿?".getBytes("GBK"),"UTF-8")可以将部分数据转化回来“邓理??”,但由于utf-8一个汉字占三个字节GBK则是两个字节。
怀疑你的filter里用了GBK编码。一般在web.xml配的,如果你用是MyEclipse可用ctrl+h检索一下,文件类型那用*.*  看看哪里这是了GBK或者GB2312了

2010年12月01日 15:30
0 0

我曾经遇到过楼主说的情况,后来就是通过把文件的编码格式都转换成utf-8 后来解决了,实在没辙了
我觉得一楼推荐的文章很值得看看,在这只能祈祷楼主了。

2010年12月02日 10:56
0 0

lz,不妨尝试一下,把你的开发工具,比如我的吧,是myeclipse8.0,里面所有的文本包括jsp,js的编码格式均转为utf-8,你的问题我以前也遇到过,就是这样做的 ....嘿嘿 希望你用的到

2010年12月01日 19:36
0 0

如果真是像楼主说的那样 所有的方法都试了 无济于事
那么楼主不妨试试将项目中的文件拷贝出来 做一下文件编码转化 然后再复制到项目里面去

具体操作在下面:
http://www.cnblogs.com/eflylab/archive/2008/07/08/1238550.html


祝你好运。

2010年12月01日 16:21
0 0

把头改成 试一试
<%@page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

2010年12月01日 14:56
0 0

get和post的处理方式是不同的。

2010年12月01日 14:52
0 0

呵呵  我说让你打印没转码的 看是什么编码

2010年12月01日 14:33
0 0

把你的admin.getName()打印一下粘出来看看是什么样。

2010年12月01日 14:03
0 0

显然你没看完这篇

2010年12月01日 13:55
0 0

你可以看下,应该可以解决
http://ethen.iteye.com/blog/797775

hope it helpful to you!

2010年12月01日 13:27

相关推荐

    关于SSH中文乱码的一个小总结.doc

    本文将总结解决SSH中文乱码问题的方法,主要涉及到spring的编码过滤器、struts.properties配置、MyEclipse工程属性设置等方面。 一、 Spring 的编码过滤器 Spring提供了一个CharacterEncodingFilter来解决中文乱码...

    SSH整合配置.doc

    SSH整合配置是Java Web开发中常见的一种框架集成方式,它涉及到Struts、Spring和Hibernate三个主要组件。Struts负责表现层,Spring管理业务逻辑和依赖注入,Hibernate则处理持久化层。以下是对SSH整合配置的一些关键...

    SSHA环境的搭建.doc

    2. 创建`struts-config.xml`配置文件,定义Action、Form Beans、Forward等。 六、配置中文编码过滤器 在`web.xml`中添加`CharacterEncodingFilter`,确保所有请求和响应都使用UTF-8编码,避免乱码问题。 七、拆分...

    struts1+spring+hibernate整合示例

    ### Struts1+Spring+Hibernate整合示例解析 在Java Web开发领域,Struts1、Spring与Hibernate三者的结合(通常简称为SSH)是构建复杂应用的一种常见模式。本篇文章将详细解读“struts1+spring+hibernate整合示例”...

    ssh(structs,spring,hibernate)框架中的上传下载

    具体的调用是将Web层将response.getOutputStream()传给write(OutputStream os,String fileId)接口,业务层直接将文件数据输出到这个响应流中。具体实现请参见错误!未找到引用源。节下载文件部分。  2、业务层接口...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

Global site tag (gtag.js) - Google Analytics