帮_____wo系列之令人崩溃的中文乱码!

spade24 2009-04-20 06:49:19
问题描述:从JSP页面通过JS传值到一个Action方法,再通过這个方法调用相应的DAO中的方法对数据库中数据进行操作。
问题产生:JSP页面中文正常,JS中文正常,Action方法中输出中文乱码,继而DAO中方法也是中文乱码,导致无法对数据库数据进行操作!
问题补充如下:
1.jsp页面已加入:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
2.js中已加入:
<script language="JavaScript" type="text/javascript" charset="UTF-8">
3.struts.xml已加入:
<?xml version="1.0" encoding="UTF-8" ?>
<constant name="struts.i18n.encoding" value="UTF-8" />
4.web.xml已加入:filter
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
5.Tomcat中的server.xml中也已加入:
URIEncoding="UTF-8"

上面的有些UTF-8,我也试着改成GBK,但还是不行(不知道是不是我改的位置不对)!哪位老师指导下是怎么回事?帮_____wo!
...全文
270 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
全体树立 2010-03-20
  • 打赏
  • 举报
回复
最后是怎么弄的呢?
我正被这个问题困扰着啊.
睿音 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 spade24 的帖子:]
问题产生:JSP页面中文正常,JS中文正常,Action方法中输出中文乱码,继而DAO中方法也是中文乱码,导致无法对数据库数据进行操作!
[/Quote]
简单的回答下吧:
首先我简述一下上述配置UTF-8的含义:
[Quote=引用楼主 spade24 的帖子:]
1.jsp页面已加入:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
2.js中已加入:
<script language="JavaScript" type="text/javascript" charset="UTF-8">
[/Quote]
上述两条都是配置页面文件编码格式。所以当页面可以正常输出中文及可以用js alert中文的时候就可以证明配置生效。
[Quote=引用楼主 spade24 的帖子:]
3.struts.xml已加入:
<?xml version="1.0" encoding="UTF-8" ?>
<constant name="struts.i18n.encoding" value="UTF-8" />
4.web.xml已加入:filter
<init-param>
<param-name>encoding </param-name>
<param-value>UTF-8 </param-value>
</init-param>
5.Tomcat中的server.xml中也已加入:
URIEncoding="UTF-8"
[/Quote]
上述3条是配置提交数据的编码格式,也就是传参。传参方式存在2种post和get。这里要注意。不论直接请求还是ajax请求。都是需要分辨post和get的。
第3点和第4点都是意图配置一个encode来做编码,解决post方式时。传参的编码问题。5条是从服务端来配置传参方式,这样就允许get方式进行传递中文参数。比如*.do?name=中文。所以从这个配置流程上,应该没有问题。

但是,从表征上看“Action方法中输出中文乱码”很可能是编码flite这里没有生效。

Ps.编码需要统一是必要的,统一为何种编码方式却是无所谓的,只要支持就可以。
spade24 2009-04-25
  • 打赏
  • 举报
回复
1.其实在eclipse中我也设置了JSP的Encoding为UTF-8;

2.WO 就是在JSP页面中有个查询的功能,然后通过JS判断查询框是否为空——为空则报alert | 不为空则通过action?value=..这种带参数的形式把查询的内容当作value传到action 方法中进行处理,可是在JSP页面这个value中文是显示正常的,但到传到action后就是乱码了!

3.我试过,强制转码不起作用。
「已注销」 2009-04-25
  • 打赏
  • 举报
回复
我总觉得 就是传值过去是iso-8859-1 你看这样试试看行不
String 乱码XXX = request.getParameter("XXX");
String 中文XXX = new String(乱码XXX.getBytes("iso-8859-1"),"UTF-8");
我自己试了 还可以
zwxtxr 2009-04-24
  • 打赏
  • 举报
回复
能把你JS中的代码贴出来吗? 主要是传值前后的几行代码?
sebatinsky 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 spade24 的帖子:]
问题描述:从JSP页面通过JS传值到一个Action方法,再通过這个方法调用相应的DAO中的方法对数据库中数据进行操作。
问题产生:JSP页面中文正常,JS中文正常,Action方法中输出中文乱码,继而DAO中方法也是中文乱码,导致无法对数据库数据进行操作!
问题补充如下:
1.jsp页面已加入:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<meta http-equiv="Content-Type" content="text/html; charset…
[/Quote]
不建议server.xml下面加上编码,首先产生乱码可能引起的有很多,环境也可能引起,比如,你只是将所有的页面都设置成了UTF-8,但是实际的编辑环境不是,比如你用eclipse,对于jsp,Java,JavaScript等的属性本省就是ISO的,所以也会造成,当然,这个可能不是主要的.只是一方面而已,

还有就是传递参数用中文,这个不是十分建议,用英文能够代替吧,呵呵,你就不用用中文了,最多想其他的方法,比如你觉得中文方便,后台一request.getAttribute(""),得到的就是直接传递的查询参数,那么你就转码吧,呵呵,虽然很不建议这个方式,因为说实话,转码很不好.,

转码方式很多,呵呵,可以根据需要看看.

或者用java.net.URLEncoder.encode(filename, "utf-8")也可能行.

spade24 2009-04-23
  • 打赏
  • 举报
回复
问题补充:
通过JS方法中的一个action带参数的形式传值:比如 ×.action?value=...;
现在就是上面这个value传到action方法中后,显示就出现了乱码(全是问号)!而在JS中通过alert(value)却是显示正常的。
spade24 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zwxtxr 的回复:]
说的具体点啊,是传参数时的中文乱码?你用的get还是post? filter中又是怎么处理的啊?
[/Quote]

问题说的很具体了,是通过JS传值,而卜是通过表单提交,所以涉及卜到迩说的get还是post!
filter是Spring中的过滤器,问题中也已给出处理方式!
zwxtxr 2009-04-23
  • 打赏
  • 举报
回复
说的具体点啊,是传参数时的中文乱码?你用的get还是post? filter中又是怎么处理的啊?
spade24 2009-04-23
  • 打赏
  • 举报
回复
問题依旧存在,誰将指引前进的方向……(3Q)
spade24 2009-04-22
  • 打赏
  • 举报
回复
还有没有其他建议。
spade24 2009-04-22
  • 打赏
  • 举报
回复
还有没有其他建议。
lucas406 2009-04-22
  • 打赏
  • 举报
回复
public static String encodeChange(String str)
{
System.out.println("before encodeChange str is:"+str);
String string = null;
try {
byte[] temp_t = str.getBytes("ISO8859-1");
string = new String(temp_t,"gb2312");
System.out.println("after encodeChange str is:"+string);
} catch (UnsupportedEncodingException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
return null;
}
return string;
}
spade24 2009-04-22
  • 打赏
  • 举报
回复
还有没有其他建议。
spade24 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yygymmmmsee 的回复:]
这个问题在我写论文的时候遇到过,以下是我的解决方法,希望对楼主有用

……

[/Quote]

看迩代码当时迩应该用的是struts1,另外我在web.xml已经配置了filter。应该不是这个问题。谢谢迩的建议!
yygymmmmsee 2009-04-22
  • 打赏
  • 举报
回复
这个问题在我写论文的时候遇到过,以下是我的解决方法,希望对楼主有用

1、创建SelfRequestProcessor.java类文件
该类继承了RequestProcessor类,并重写processPreprocess()方法,在该方法中设置Request对象的请求编码为GBK编码,具体代码如下:

package com.wsp.exam_system.util;
import org.apache.struts.action.RequestProcessor;
import javax.servlet.http.*;
import java.io.*;
public class SelfRequestProcessor extends RequestProcessor {
public SelfRequestProcessor() {
}
protected boolean processPreprocess(HttpServletRequest request,HttpServletResponse response){
try {
request.setCharacterEncoding("GBK");
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}
return true;
}
}

2、配置struts-config.xml文件
在struts-config.xml文件中利用<controller>元素配置自定义控制器组建SelfRequestProcessor,用于对请求的参数进行转码,具体代码如下:
<controller processorClass="com.wsp.exam_system.util.SelfRequestProcessor"/>
zwxtxr 2009-04-21
  • 打赏
  • 举报
回复
先统一编码为UTF-8.服务器中设置好。(你已经做了)
如果是post请求的话,过滤器中 加 request.setCharacterEncoding("text/html;charset=utf-8");即可。
但如果你用了get请求传中文参数的话,过滤器中request.setCharacterEncoding("text/html;charset=utf-8");就成了最大的阻碍。

所以在过滤器中判断下 ,如果是get则不做处理。如果是post加request.setCharacterEncoding("text/html;charset=utf-8");

如果js中使用的是post,就到此为止。如果使用的是GET,则先对中文参数encodeURIComponent编码,自动转化为UTF-8。action中用可以直接用request.getParameter,此函数会根据服务器配置自动解码,获得中文信息了。
三月暖阳 2009-04-21
  • 打赏
  • 举报
回复
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
把jsp中上面这句去了试试
spade24 2009-04-21
  • 打赏
  • 举报
回复
补充:乱码都是一些问号:“???”
spade24 2009-04-21
  • 打赏
  • 举报
回复
对3楼:
escape()返回的是Unicode格式的,我需要的是中文,所以不行的!我本身在JS中显示的中文还是正常的,只是传到Action中就变成乱码了。

对6楼:
我试过了,还是乱码!
加载更多回复(6)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧