具体内容如下:
web服务:was6.0
浏览器:机顶盒(UT斯达康的盒子)+电视机问题描述:
1、页面编码GBK
2、通过post提交表单,汉字乱码,页面中汉字能正常显示(所有过程,页面汉字都正常)。
3、项目中设置了spring的CharacterEncoding过滤器,转码为GBK
经测试:
1、盒子提交数据的编码应该为ISO-8859-1,但在转GBK后就乱码,
2、在过滤器中先强制转换编码为8859,在action中强制转换8859到GBK,乱码问题消失
3、在过滤器中先转换编码为8859,然后转换编码为GBK,action中不转换,依然乱码
4、在was中设置jvm参数为GBK,依然乱码
整个过程中, 在pc机(windows、linux)中访问都正常大侠,该你出手了
救救小的吧,我不想每个页面都转码啊
web服务:was6.0
浏览器:机顶盒(UT斯达康的盒子)+电视机问题描述:
1、页面编码GBK
2、通过post提交表单,汉字乱码,页面中汉字能正常显示(所有过程,页面汉字都正常)。
3、项目中设置了spring的CharacterEncoding过滤器,转码为GBK
经测试:
1、盒子提交数据的编码应该为ISO-8859-1,但在转GBK后就乱码,
2、在过滤器中先强制转换编码为8859,在action中强制转换8859到GBK,乱码问题消失
3、在过滤器中先转换编码为8859,然后转换编码为GBK,action中不转换,依然乱码
4、在was中设置jvm参数为GBK,依然乱码
整个过程中, 在pc机(windows、linux)中访问都正常大侠,该你出手了
救救小的吧,我不想每个页面都转码啊
由于Java默认的编码方式是UNICODE,所以用中文易出问题,常用解决:
String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);utf-8解决JSP中文乱码问题,在页面的开始处加:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%request.setCharacterEncoding("UTF-8");%>如果仍不能解决问题,还需要这样处理一下:
String msg = request.getParameter("message");
String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");out.println(st);
package com.wgh.DB;
public class chStr {
/***************************************************
*method name: chStr()
*method function:解决输出中文乱码问题
*return value: String
*2006-01-08
****************************************************/
public String chStr(String str){
if(str==null){
str="";
}else{
try{
str=(new String(str.getBytes("iso-8859-1"),"GB2312")).trim();
}catch(Exception e){
e.printStackTrace(System.err);
}
}
return str;
}
/***************************************************
*method name:convertStr()
*method function:显示文本中的回车换行、空格及保证HTML标记的正常输出
*return value: String
* author:wgh
*2006-01-08
****************************************************/
public String convertStr(String str1){
if(str1==null){
str1="";
}else{
try{
//replaceAll(String str1,String str2)方法为JDK1.4.x的新方法,使用str2替换字符串中的所有str2字符串
str1=str1.replaceAll("<","<");//替换字符串中的"<"和">"字符,保证HTML标记的正常输出
str1=str1.replaceAll(">",">");
str1=str1.replaceAll(" "," ");
str1=str1.replaceAll("\r\n","<br>");
}catch(Exception e){
e.printStackTrace(System.err);
}
}
return str1;
}
}
你的WAS是在linux下的吗?还有你用的是Spring的Action直接输出吗,还是用其他的view层代替?
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">还有就是,自己写一个filter,(过滤器)对编码进行规范化,这样,如果你的编码有问题,不是它指定的编码,你就通不过,当然,转码是最不好的习惯了,因为,这里你转码了,下次换个地方,可能不需要转码才行,转码反而会出错,规范.
这种问题估计很少见,毕竟用机顶盒的不多
测试了很多方法,但测试的过滤好像都有问题,
最纳闷的是,action中能把8859转成GBK,为什么过滤器转GBK就不行
过滤器里设置总不能成功过滤,是不是我过滤器的设置有什么问题,或was有什么设置问题
<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>
... ...
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>ISO-8859-1</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
第一层强制转换成8859,第二层不强制,然后在actiong中再转gbk,乱码就解决了
但如果在过滤器中转换时,第二层也设置强制转换gbk,依然乱码,