关于中文乱码问题(总结)

最近在学习web开发,遇到一个比较棘手的问题,就是web比较烦人的中文乱码问题。

遇到此类问题,
我们也不必担心。想想其中的原理,就可以排除很多问题。

先确定是那个环节的charset的问题。


一 从客户端到服务器的问题

 

一般从客户端到服务器端的问题主要用户处理与页面交互时产生的乱码问题,例如提交表单等。具体验证你可以打印一些语句出来看看。单独做一个小实验。

1.解决表单的 get 方式:

在这里我们利用Tomcat来举例子:

在server.xml中添加一项 useBodyEncodingForURI="true"

server.xml:

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" useBodyEncodingForURI="true" />

 

 

2.解决表单的post问题:

在未取得参数之前要设定

request.setCharacterEncoding("GBK");

 

这样我们就解决了客户端到服务器端 的问题了。

如果这个环节没有出现任何问题的话,那就是服务收到的数据往数据库存储的时候出现了问题,可能就是数据库本身的编码问题设置

 

二 服务器到数据库存储出现的问题

 

这时我们可以设置数据库的编码形式就行了。

这里我想要跟大家说的,还有演示的就是一种常见的解决方法,那就是利用filter来解决中文乱码问题。

 

1.我们创建一个filter

 

EncodingFilter.class:

 

package com.softrc.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;

public class EncodingFilter implements Filter{
 private String code;
 
 public void destroy() {
  
 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  request.setCharacterEncoding(code);
  chain.doFilter(request, response);
 }

 public void init(FilterConfig filterConfig) throws ServletException {
  code = filterConfig.getInitParameter("code");
 }
 
}

 

相应在项目中的web.xml中配置下面的信息,切忌要放在前面,因为过滤器是有顺序的

 

web.xml:

 

<filter>
 <filter-name>encoding</filter-name>
 <filter-class>com.softrc.filter.EncodingFilter</filter-class>
 <init-param>
  <param-name>code</param-name>
  <param-value>GBK</param-value>
 </init-param>
</filter>
<filter-mapping>
 <filter-name>encoding</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping> 

 

 

 

 

posted @   jlins  阅读(324)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示