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

相关推荐

    LINUX SSH显示中文乱码解决

    本文将详细介绍如何解决SSH连接时出现的中文乱码问题,并提供一些实用的方法来确保中文字符能够正确显示。 #### 原因分析 中文乱码的问题通常与字符编码设置有关。在Linux系统中,字符编码由环境变量`LANG`、`LC_...

    SSH Secure Shell Client中文乱码

    根据提供的描述,“SSH Secure Shell Client中文乱码”这一现象重复出现,表明用户在使用SSH Secure Shell Client时遇到了严重的字符编码问题。中文乱码通常表现为中文字符显示为乱码或无法正确识别中文字符,这可能...

    ssh中文乱码解决

    ### SSH中文乱码解决方案 #### 一、问题背景与概述 在使用SSH远程登录Linux服务器时,有时会遇到中文字符显示为乱码的情况。这主要是因为客户端与服务器端的字符编码设置不一致导致的。本篇文章将详细介绍如何解决...

    关于MyEclipse5.5合成SSH后出现中文乱码的问题解决方法之一

    在描述中,开发者遇到了一个特殊的情况,即在MyEclipse 5.5下整合SSH后,当向数据库中插入包含中文的数据时,出现了乱码。为了解决这个问题,开发者尝试了多种常见方法,如设置项目、数据库连接、页面编码为UTF-8,...

    连接到linux系统,SSH,telnet终端中文显示乱码

    ### 连接到Linux系统,SSH、Telnet终端中文显示乱码解决方案 在处理与Linux系统的远程连接时,用户经常会遇到中文字符显示为乱码的问题,尤其是在通过SSH或Telnet进行连接的情况下。本文将详细介绍如何解决这一问题...

    ssh终端显示中文乱码.docx

    SSH 终端中文乱码解决方案 在使用 SSH 终端连接 Linux 服务器时,经常会遇到中文乱码的问题,这是由于 Linux 服务器的语言编码设置不正确所致。今天,我们将讨论如何解决 SSH 终端中文乱码的问题。 问题原因 ...

    ssh2整合步骤

    SSH2整合指的是在Java开发中将Spring、Struts2和Hibernate三个开源框架集成在一起,以构建高效、灵活的企业级Web应用程序。在这个过程中,Spring提供依赖注入和事务管理,Struts2负责视图和控制层,而Hibernate则...

    SSH框架解决中文乱码

    ### SSH框架解决中文乱码 #### 一、背景与问题定义 在开发基于SSH(Struts2 + Spring + Hibernate)框架的应用程序时,经常会遇到中文乱码的问题。这些问题主要出现在两个方面:一是前端页面上中文字符显示不正常...

    解决CentOS SSH连接时中文乱码

    ### 解决CentOS SSH连接时中文乱码 在日常运维工作中,我们经常需要通过SSH远程登录到服务器进行操作。然而,有时会遇到一个常见的问题——通过SSH连接后,原本设置为中文的语言环境出现了乱码现象。本文将详细介绍...

    Linux系统中文乱码解决完整方案

    在 Linux 系统中,中文文件在 ssh 终端中显示为乱码,这是由于 SSH 客户端和 Linux 服务器之间的字符集不同所导致的。解决这个问题,需要修改 Linux 系统的默认字符集,使其与 Windows 系统的一致。 本文档提供了两...

    SSH2整合框架

    SSH2整合框架是Java开发中常用的一种高效、稳定且可扩展的Web应用程序开发架构,它由Struts2、Spring和Hibernate三个开源框架组合而成。这三个框架各司其职,共同构建了一个强大的MVC(Model-View-Controller)设计...

    SSH2框架整合

    SSH2整合环境: Spring:spring 2.5 Struts:struts2.1.6 Hibernate:hibernate3.3.1 数据库:oracle9i Myeclipse:myeclipse6.5 Tomcat:tomcat6

    处理Java的ssh集成中的中文乱码问题

    在Java Web开发中,尤其是在整合SSH(Struts + Spring + Hibernate)框架时,经常会遇到中文乱码的问题。这不仅影响用户体验,还可能导致数据处理错误。本文将详细介绍如何通过自定义过滤器(Filter)和请求处理器...

    SSH框架整合jar包

    SSH框架整合是Java Web开发中常见的一种技术栈组合,它由Spring、Struts2和Hibernate三个框架构成。这个"SSH框架整合jar包"是开发者为了方便项目构建,避免手动逐个添加和配置这三个框架所需的库文件而制作的集合。...

    SSH2整合全注解实例

    SSH2整合全注解实例是基于Struts2、Spring和Hibernate这三个开源框架的集成应用,它们共同构建了一个强大的Web应用程序开发平台。SSH2是Java Web开发中的经典组合,提供了模型-视图-控制器(MVC)的设计模式,使得...

    SSH2完美整合流程

    SSH2整合是Java开发中常见的技术实践,主要涉及Struts2、Hibernate和Spring三个开源框架的集成。这些框架分别负责表现层、持久层和业务层的管理,通过整合可以实现MVC(Model-View-Controller)架构,提高应用的可...

    mysql+jsp+SSH网站开发中文乱码解决方案

    在进行MySQL、JSP以及SSH(Struts、Spring、Hibernate)框架集成的网站开发时,中文乱码问题是一个常见的困扰。这通常是由于编码格式不一致、设置不当或处理方式错误导致的。以下是一些关键的知识点,可以帮助你解决...

    ssh2整合实现CRUD

    SSH2整合实现CRUD是指在Java Web开发中,将Struts2、Spring和Hibernate这三个开源框架集成起来,用于实现创建(Create)、读取(Read)、更新(Update)和删除(Delete)等基本数据操作。SSH2是Struts2、Spring和...

    解决ssh乱码的问题

    当SSH客户端发送数据到服务器端,或者服务器端返回数据给客户端时,如果双方使用的字符编码不同,则可能导致接收方无法正确解析字符,从而出现乱码现象。 #### 解决方案 要解决SSH乱码问题,我们可以通过调整...

    SSH框架整合教程

    最后,掌握如何处理SSH整合中可能出现的问题,如事务管理、数据一致性、性能优化等。 总的来说,SSH框架整合教程对于提升Java开发者的技能和理解企业级应用开发流程至关重要。通过深入学习和实践,开发者能够构建出...

Global site tag (gtag.js) - Google Analytics