首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于一个很头痛的有关问题——乱码

2013-01-06 
关于一个很头痛的问题——乱码相信大家都遇到过页面乱码,数据库乱码的时候把,说说我的:我的事Mysql数据库,设

关于一个很头痛的问题——乱码
相信大家都遇到过页面乱码,数据库乱码的时候把,说说我的:
我的事Mysql数据库,设置的字符集是utf-8.页面编码全部是utf-8。整个项目全部是utf-8的编码:
1.我可以直接在数据库里面手动插入中文,英文,然后在页面中将数据库内容读出来都是正常的,没有乱码;
2.在页面表单填入英文字符,提交的数据库都是好的;
3.如果在Jsp页面的表单里面有中文的话,提交到数据库里面,数据库中提交的中文部分就是乱码的,页面读出来也是乱码
4.如果在jsp表单提交的action(LoginAction)中的execute方法中强制转换页面中的中文部分,可以实现不乱吗,并且这种强制装换只能是(比方说提交的user.username为中文)
user.setUsername(new String(user.getUsername().getBytes("iso-8859-1"),"utf-8");像这样转换后提交到数据库的就不乱码了。并且只能这样装换,换别的编码都不行。
 


以前数据库字段比较少,就转换了一下,现在数据库字段多了发现这样转换很麻烦,这个问题怎么解决。网上看了很多,也请教过别人,都没有解决。

总的来说就是插不进去中文,可以读出中文。。
求赐教~~~~~~
[解决办法]
http://blog.csdn.net/cuihuaming198809/article/details/8206960 看看能不能有帮助
[解决办法]
我曾经也遇到这个问题,我用的是servlet,jsp,oracle,但加了过滤器后就好了,你看看是不是数据库、servlet、jsp的编码是不是一致
[解决办法]
这个问题我们普科国际的老师昨天刚刚讲过,你设置的只能是某个子页面,或者说只能是适合于页面是get提交方式的时候不乱码,要想所有的页面中在表单提交后不显示乱码,首先找到你的tomcat的安装路径E:\tools\apache-tomcat-6.0.18\conf,在这个conf文件夹下有个server.xml,将配置端口号的地方多添上最后一句话<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" useBodyEncodingForURI="true"/>
之后,去写过滤器,
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);//继续执行之前的请求操作
}
最后去项目的web.xml中将过滤器配置一下

<filter>
  <filter-name>SetCharacterEncodingFilter</filter-name>
  <filter-class>com.pk.myxjgs.web.filter.SetCharacterEncodingFilter</filter-class>
   </filter>
  
  <filter-mapping>
  <filter-name>SetCharacterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
这样配置的目的是让你的过滤器在你选定的范围内起作用,去试试吧
[解决办法]
首先LZ输出下面这段看看自己到底是什么编码格式
System.out.println("编码格式为:"+java.nio.charset.Charset.defaultCharset());

如果不是UTF-8 
你打开我的电脑-高级-环境变量-系统变量 设置一下 
变量名:JAVA_TOOL_OPTIONS 
变量值:-Dfile.encoding=UTF-8 
变量值可根据你的编码改变你计算机的根本编码格式
[解决办法]
字符集过滤器
[解决办法]
加个过滤器就好了 还有 查看你的数据库的编码集 看看是不是 UTF-8 有课能你在配置的时候没有选对。不行的时候 可以先把数据导出来。重装数据库(普科科普)
[解决办法]
在服务器的server.xml加上字符编码。
<Connector port="8000" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" useBodyEncodingForURI="true"/>
[解决办法]
跟数据库之间的乱码问题,必须在连接数据库的URL里指定字符编码:
,假如是MYSQL,URL写成下面的格式:
jdbc:mysql://hostname[:port]/dbname?characterEncoding=utf-8
[解决办法]
你试试把Tomcat的server.xml改一下字符集。如果真的是jsp-action有乱码的话,应该可以解决。


[解决办法]


[解决办法]
解决了没有,lz呀,问题你说你找到了jsp到action,,那估计确实是传值有问题,上面说了这么方法都不行,你按照我的笨试一下
1.我看了你的过滤器,我也不知道你是用了什么框架,如果自己写过滤器我感觉你那些写好像还是有点的儿问题吧,你就按照我的写个doFilter
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//设置请求编码
HttpServletRequest req=(HttpServletRequest)request;
if(req.getMethod().equalsIgnoreCase("post")){
req.setCharacterEncoding("UTF-8");
}else{
Map map=req.getParameterMap();
if(map.size()>0){
Collection values=map.values();
Iterator it=values.iterator();
while (it.hasNext()) {
String[] object = (String[]) it.next();
for (int i = 0; i < object.length; i++) {
object[i]=new String(object[i].getBytes("iso8859-1"),"UTF-8");
}

}
}
}
//设置响应编码
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);

}

这个过滤器方法你记得要在web.xml里面自己配置一下,如果这个还不可以的话,继续下面
1.重新新建一个项目(随便搭建一个框架只要跑通jsp到action),代码基本就按照现成项目复制过来,注意设置所有编码统一,上面这么多人都说了,肯定还是有用的,过滤器还是用我的吧,你的那个我感觉不对,不要有意见哦,,你要是用了spring的话,就直接配置spring的过滤器,应该是不可能出错的啊,你页面也都编码统一了。
2.还是不行,你就重新换台别人电脑试一下吧,,,,别人电脑没有问题就证明你电脑有问题了,不行找原因就重新装个,也快而且省事,,估计是这些都不需要的,反正要解决这个问题就一步一步来吧,耐心点,说不定你就那个地方写错了,按照上面那么多大哥的方法你都不成功,按理来说是不可能的啊,再回过头来看看吧,,
3.还不行话,那你就坑爹了,砸电脑吧,是公司项目就离职吧,是自己电脑搭建环境就重新开发,网上找个例子试验一下,

这是我解决问题的办法,你试一下,。。。

热点排行