SSH编写程序中文乱码解决

用SSH开发应用其中一个比较麻烦的事就是中文支持,包括jsp页面显示,get/post请求处理,java代码的字符串,后端数据库连接都需要考虑。为了简化这个过程,我们尽量在各个地方使用单一编码,推荐UTF-8。

下面以UTF-8为例罗列一下需要考虑的配置。

1. 一般我们的应用都跑在Tomcat上,Tomcat的配置文件server.xml需要为Connector添加URIEncoding配置,这样它解码中文才不会出现乱码。

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

2. jsp文件头部需要需要添加contentType和pageEncoding,html的meta中添加content-type。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

3. 项目的web.xml中添加编解码filter,添加到其他filter前面。

<filter>
    <filter-name>CharacterEncodingFilter</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>false</param-value>
    </init-param>
  </filter> 
  <filter-mapping>  
    <filter-name>CharacterEncodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
  </filter-mapping> 

4. 在jdbc的连接url中加上charsetEncoding参数,这样连接后端数据库就会使用UTF-8编码

 jdbc.url=jdbc:mysql://1.1.1.1:3306/foo?useUnicode=true&amp;characterEncoding=UTF-8

5. 后端数据库也配置成UTF-8的,比如Mysql需要在my.cnf中client和mysqld域中添加字段。

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8

6. 最后就是你的源码编辑器也设置成UTF-8,包括外部的资源文件,如果有个别需要转码的就在需要的时候转一下,比如8859转utf-8。

utfstring = new String(pstring.getBytes("iso-8859-1"), "UTF-8");

上面几点基本就包括了解决乱码的要点,依照坐下来一般就没啥问题了,剩下编码中只需要记住java内部用的UTF-16双字节编码,UTF-16就是交通枢纽。

原文地址:https://www.cnblogs.com/marsbible/p/4568770.html