您的位置:首页 > 编程语言 > Java开发

ERP,网站开发之后台struts2乱码解决总结大全

2011-10-18 14:28 393 查看
这两天,终于开始了我入软件开发的第一个网站。。。总体来说,还算是比较顺利的,呵呵,不过最后还是出现了一点小插曲,终于遇见了我最“期待”的乱码问题,乱码啊,乱码啊,你真是我这样小菜鸟级地上帝啊。。。
现在开始说说我遇见的乱码情况,我的总体框架是前台界面一个表单,然后提交信息到后台的action里面,然后用在调用方法把数据提交到数据库里面。。。可惜一切都不像我想的那么完美,最后在表单提交到action里面的时候还是出现了乱码。。。愁啊。。。但是由于解决了一个暑假的乱码经验,也没以前那么感觉恐惧了。。。想着利用以前的方法一定可以解决,可是最后解决了一整天的时间,以前的方法几乎都用过了。。最后还是没有解决。。。
我以前的自认为是杀手锏的方法:1.在表单页面头部设置字符编码为utf-8
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

然后在设置页面请求和回应的编码:
<%request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); %>
最后再再action里面写上:
ServletActionContext.getRequest().setCharacterEncoding("utf-8");
ServletActionContext.getResponse().setCharacterEncoding("utf-8");
设置完这些以为完事大吉了。。。可是最后提交还是乱码,乱码啊。。乱码。。没办法,继续想办法。。最后想起来了以前曾经用过的传说中的什么struts2国际化问题,在struts.xml前面加上这么一句:
<constant name="struts.i18n.encoding" value="utf-8" />
哎,咱也不管这是什么多大的国际化。。。心想着只要能解决咱的问题就OK了。。。。课时大失所望啊。。还国际化,真没见其什么效果。。。
乱码啊,,乱码,你把我搞得头都大了。。。没办法,继续解决。。去网上查查吧。。。最后实在没办法了,还是用一下我最讨厌的过滤器试试吧。。
具体过程:
1.编写过滤器类:
package org.RN.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Encoding implements Filter {
@SuppressWarnings("unused")
private FilterConfig config=null;
String encoding=null;
public void destroy() {
this.encoding=null;
this.config=null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(encoding!=null)
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);

}
public void init(FilterConfig arg0) throws ServletException {
this.config=arg0;
this.encoding=arg0.getInitParameter("encoding");
}
}
2.在web.xml配置
<filter>
<description>缓存过滤</description>
<filter-name>Encoding </filter-name>
<filter-class>
filter.Encoding
</filter-class>
</filter>
<filter-mapping>
<filter-name>Encoding </filter-name>
<url-pattern>*</url-pattern>
</filter-mapping></filter>
写完这些,骄傲的以为终于万事大吉了,可是可是可是他竟然还是乱码,我没办法了,我以前的那点解决乱码的老店都拿出来了,没办法了,心想着这回死定了,这个时候多亏了好兄弟兼职团队伙伴小金金的鼓励啊。。就需网上淘金,查啊查,论坛发帖啊:
以下是我发帖及回帖的一些情况
1楼:我写了一个表单。。表单的数据提交到struts2的action里面。。。然后由action提交到数据库。。可是数据到了数据库就是乱码了。。。。我用的数据库是sqlserver。。。高手指点啊。。。。尽量相信点。。。。。表单界面也设置了:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>和<%request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); %>
action 里面也设置了 ServletActionContext.getRequest().setCharacterEncoding("utf-8");
ServletActionContext.getResponse().setCharacterEncoding("utf-8");

2楼:数据库编码 看看吧

3楼:说详细点。。。怎么设置sqlserver的字符编码啊、、、我不会。。。没百度出来、、、

4楼:jdbc:mysql://localhost:3306/android_stat?useUnicode=true&characterEncoding=utf-8
在连接数据库的时候加上 ?useUnicode=true&characterEncoding=utf-8

5楼:加上那个。。。"jdbc:sqlserver://localhost:1433; DatabaseName=RuiNiInfoDb?useUnicode=true&characterEncoding=utf-8";
数据库就连不上了。。。
无法打开登录所请求的数据库 "RuiNiInfoDb?useUnicode=true&characterEncoding=utf-8"。登录失败。

6楼:怎么可能呢,实在不行写一个过滤器,应该能搞定的。

7楼:满足以下两点,不会有乱码的存在的。
1,程序文件,jsp文件是utf-8编码的,jsp文件的头摇设置utf-8编码类型
2,数据库设置成utf-8
你看下你的数据库编码设置的是什么。如果网页是utf-8 数据库是gb2312 也有可能会乱码、在数据库上右键属性查看。

8楼;sqlserver设置数据库编码
9楼:一般ssh整合的时候都会在web.xml里面配置一个字符过滤的。
<!-- 转译字符编码 -->

Java code <filter>
<filter-name>encodingFilter</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>
10楼:恩楼上说的很对,就是数据库的问题,解答如下:第一种办法:先选中出错的数据库→选中以后右键点击属性会弹出数据库属性 对话框→选中数据库属性对话框中的选项→把选项中的排序规则设置成:Chinese_PRC_90_CI_AS→最后点击确定即可。(注意:在选择数据库属性的时候必须确保你所修改的数据库未被使用才可以修改否则会失败的)第二种办法:首先打开你的sql查询分析器(新建查询),然后输入以下代码执行即 可:ALTER DATABASE 数据库名 COLLATE Chinese_PRC_90_CI_AS例如: ALTER DATABASE 9NPC COLLATE Chinese_PRC_CI_AIALTER DATABASE AutoUpgrade COLLATE Chinese_PRC_CI_AI解析原因:出现以上情况主要是因为数据库属性的排序规则设置不正确,在Microsoft SQL Server 2005 中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则。排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。如:  Chinese_PRC_90_CI_AS前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。排序规则的后半部份即后缀 含义:   _BIN 二进制排序   _CI(CS) 是否区分大小写,CI不区分,CS区分  _AI(AS) 是否区分重音,AI不区分,AS区分     _KI(KS) 是否区分假名类型&defKI不区分,KS区分 _WI(WS) 是否区分宽度 WI不区分,WS区分 区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项。这个是百度找的,sqlserver2005的解决办法,怎么会找不到呢。。。
11楼:sqlserver 数据库的编码问题。

哎,可能是我说错了。。。可惜,回答的都是关于数据库的问题。。。并且很多人都是一些废话。。。哎,没办法。。继续想办法发。。。
哈哈,运气不错,遇到一个女程序员:教给我一种新的解决乱码的方法:
author=new String(author.getBytes("iso8859-1"),"utf-8");
content=new String(content.getBytes("iso8859-1"),"utf-8");
安说这也不是什么新方法。。。可是他惯用啊、、、、呵呵。。。还真把乱码给解决了、、、、
按着这个方法。。。成功解决了两个类似的乱码问题,课时当解决第三个类似的乱码问题时,这种方法就失效了。。。。
仔细分析了一下,很可能这个表单里面包括文件上传的问题:
<form action="NewAddAction"method="post" name="form"
enctype="multipart/form-data">
恩,就是这里的问题。。反复试验了一下,去掉以上所有解决乱码的方法就可以成功解决这里的乱码问题。。。哎,谁叫咱是菜鸟来着。。。只能反复的试验。。。这里面为什么这样用,我还真不知道这里面的原理。。。哎,菜鸟的悲哀啊

好了。。。乱码解决了,这篇文章页应该包括了大部分的解决乱码的方法把。。。
欢迎大家参考,拍砖,转载请注明出处
本文出自 “曹胜欢” 博客,请务必保留此出处http://javacsh.blog.51cto.com/3545281/1129197
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: