我通过jsp页面的一个文本域,提交到action里面,所有编码设置的都是UTF-8(jsp页面,配置文件等等),其中包括一个设置编码的filter,跟踪filter确实也执行了下面的语句:encoding为UTF-8
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
但是在action里面通过String productName=request.getParameter("name");取到的值还是乱码,
如果productName = new String(productName.getBytes("ISO-8859-1"),"UTF-8");这样的话就不是乱码。请大虾们帮忙看看,怎么能解决这个问题啊。
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
但是在action里面通过String productName=request.getParameter("name");取到的值还是乱码,
如果productName = new String(productName.getBytes("ISO-8859-1"),"UTF-8");这样的话就不是乱码。请大虾们帮忙看看,怎么能解决这个问题啊。
解决方案 »
- 报销流程输入的值怎么通过struts带回action?
- 标签问题
- 复选框
- [求助] 如何从梦网跳出?
- jsp当中的注释
- 我现在该怎么办比较合适点?
- 请教:在JSP中调入JavaBean时为什么总是报错“不能解析符号”?
- 关于JSP网页失效的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 探讨大数据量的分页实现之二
- 【求助】javabean 访问文件的路径问题
- Web Service 异常:服务器未能识别 HTTP 头 SOAPAction 的值: http://tempuri.org/
- 谁知道 用友华表 Cell 插件 模版 怎么编辑完 就保存 或上传 到 服务器 java 项目 案例
设置成GBK或者GB2312没什么不好呀
1.在页面设置编码方式(UTF-8)
2.编写字符编码过滤器 在过滤器中写下一下代码:
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
//设置字符编码属性
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
3.在tomcat修改端口的地方 加上这样一句代码:URIEncoding="UTF-8"
如下所示: <Connector port="9090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
4.将要发送的数据这样传送:
URLEncoder.encode("要传送的字符串","UTF-8");
5.修改浏览器的编码方式
6.修改自己系统或编辑器的编码方式
手动转码String gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
然后再写个过滤器,就万事OK了!package com.company.filter;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;
/**
* 编码过滤器实体类
* @author Administrator
*
*/
public class EncodingFilter implements Filter {
private FilterConfig config;
private String encoding="utf-8";
public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);//过滤请求的编码
chain.doFilter(request, response);//继续过滤
response.setContentType("text/html;charset=utf-8");//过滤响应的编码 } public void init(FilterConfig config) throws ServletException {
this.config=config;
String s=config.getInitParameter("encoding");//获取初始化参数数,
if(s!=null){
this.encoding=s;
} }}
在web.xml中配置:<!--配置字符编码的过滤器-->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.company.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- 过滤器映射 -->
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern><!-- 对所有资源过滤 -->
</filter-mapping>
页面本身有中文,一定要在PrintWriter out = resp.getWriter();之前加上 resp.setContenetType(“text.html;charest=gbk”);
解决get方式乱码---修改server.xml --URIEncoding=”gbk”
解决post方式提交内容乱码--request.setCharacterEncoding(“gbk”);
解决mysql乱码: set names gbk;
<jsp:param name=”user” value=”<%=s%>“ />, url地址包含中文参数 解决办法<%request.setCharacterEncoding(“GBK”); %>
用过滤器吧 . 还有数据库编码也要改? 项目的.settings这个文件夹的文件里面有设置编码的.
再不行的话就设置过滤器!
你写一个类继承org.apache.struts.action.RequestProcessor;
具体这样:package com.liuwei;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.RequestProcessor;public class MyRequestPro extends RequestProcessor { /* (non-Javadoc)
* @see org.apache.struts.action.RequestProcessor#process(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public void process(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
super.process(request, response);
}}之后在配置文件struts-config.xml中配置如下:
<controller processorClass="com.accp.y16.favorite.filter.MyRequestPro" />
这样就解决中文乱码问题了,不过这只能解决post请求,如果是get请求,只能用new String()构造了!
如果productName = new String(productName.getBytes("ISO-8859-1"),"UTF-8");这样的话就不是乱码。
这说明你的过滤器没生效,没完成字符转码嘛!
表面看是没奏效,但是我跟踪filter确实设置了编码方式为UTF-8了,见鬼了
那你在过滤器中打印一下
HttpServletRequest req =(HttpServletRequest) ServletRequest;
String productName=req.getParameter("name");
<filter-name>EncodingFilter </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>EncodingFilter </filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
我琢磨着你的映射是"/* "这样配置的,好像是对.do请求不起作用也,我初学时也遇到过这种情况,加上*.do就OK了,LZ试试看!
明明过滤器里设置了字符编码,但是在action中取得还是乱码
楼主怎么解决的啊?