SSM项目中的乱码问题的解决

四种常见编码

ISO-8859-1 单字节编码,兼容ASCII码,相当于ASCII码的扩展,无法表示中文字符,系统默认编码 。
GBK 双字节编码,国标码,可以表示繁体字和简体字,而GB2312编码只能表示简体字,GBK兼容GB2312编码 。
UNICODE 定长双字节编码,可以表示所有语言的字符,不兼容任何编码,很多软件内部是使用unicode编码来处理的 。
UTF 不定长编码,可以表示所有语言的字符,常用UTF-8,兼容iso8859-1编码,UTF编码会比UNICODE编码节省。

1.解决post中文乱码问题

在web.xml配置

<!--post乱码过滤器-->
<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>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
2.解决get中文乱码问题

(1)第一种方法:修改tomcat配置文件conf/server.xml文件, 添加URIEncoding=”UTF-8”,使编码与工程编码一致,如下:

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

(2)第二种方法:对参数进行重新编码:

String str =new String(request.getParamter("str").getBytes("ISO8859-1"),"utf-8")

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

3.数据库中文乱码

在jdbc.properties文件内指定utf8格式

driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8
4.html乱码和浏览器支持
<!-- 页面meta -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">

常用例子:

<meta http-equiv="X-UA-Compatible" content="IE=7">  
// 以上代码告诉IE浏览器,无论是否用DTD声明文档标准,IE8/9都会以IE7引擎来渲染页面。
<meta http-equiv="X-UA-Compatible" content="IE=8">  
// 以上代码告诉IE浏览器,IE8/9都会以IE8引擎来渲染页面。  
<meta http-equiv="X-UA-Compatible" content="IE=edge">  
// 以上代码告诉IE浏览器,IE8/9及以后的版本都会以最高版本IE来渲染页面。  
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9">  
<meta http-equiv="X-UA-Compatible" content="IE=7,9">  
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
// 以上代码IE=edge告诉IE使用最新的引擎渲染网页,chrome=1则可以激活Chrome Frame.

注意:
(1)据官网定义X-UA-compatible标头不区分大小写,但是,它必须写在网页中除了title元素和其他meta以外的所有其他元素之前,如果不是,这句话将不起作用
(2)content 里的内容应该书写为IE=8。而不是直接书写IE8

5.jsp中的中文乱码问题
<%@ page contentType="text/html;charset=utf-8" language="java"%>
6.解决@responsebody返回乱码问题

在springmvc配置文件中添加

<mvc:annotation-driven> 
        <!-- 消息转换器,解决responseBody返回中文乱码问题 --> 
        <mvc:message-converters register-defaults="true"> 
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"> 
                <property name="supportedMediaTypes" value="text/plain;charset=UTF-8" /> 
            </bean> 
        </mvc:message-converters> 
</mvc:annotation-driven> 
7.Response或者Servlet乱码问题

response乱码指的是:
服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码。

PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(), "UTF-8"));
8.request中文乱码问题

request乱码指的是:
浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码。
方法一:请求加上方法

@RequestMapping(value="/getphone",produces = "text/plain;charset=utf-8")  

方法二:springMVC.xml配置文件

<!-- 处理请求返回json字符串的中文乱码问题 -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果在SSM项目的MyBatis出现问题,可以尝试以下解决方法: 1. 在MyBatis的配置文件,添加以下属性: ``` <configuration> <settings> <setting name="jdbcTypeForNull" value="NULL" /> <setting name="mapUnderscoreToCamelCase" value="true" /> <setting name="defaultExecutorType" value="SIMPLE" /> <setting name="lazyLoadingEnabled" value="true" /> <setting name="aggressiveLazyLoading" value="true" /> <setting name="autoMappingBehavior" value="PARTIAL" /> <setting name="logImpl" value="LOG4J" /> <setting name="localCacheScope" value="SESSION" /> <setting name="jdbcTypeForNull" value="NULL" /> <setting name="useGeneratedKeys" value="true" /> <setting name="defaultStatementTimeout" value="25000" /> <setting name="defaultFetchSize" value="100" /> <setting name="cacheEnabled" value="true" /> <setting name="defaultExecutorType" value="REUSE" /> <setting name="useColumnLabel" value="true" /> <setting name="useActualParamName" value="true" /> </settings> </configuration> ``` 其,`useColumnLabel`和`useActualParamName`都设置为`true`,可以解决码的问题。 2. 在数据库连接的URL,添加以下参数: ``` useUnicode=true&characterEncoding=utf-8 ``` 例如: ``` jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf-8 ``` 这样可以确保数据库连接的字符集为UTF-8,避免问题。 3. 在实体类,为文属性添加`@Column`注解,并设置`columnDefinition`属性为`text`,例如: ``` @Column(columnDefinition = "text") private String name; ``` 这样可以确保数据库表的字段类型为`text`,避免问题。 总之,解决问题需要确保MyBatis、数据库连接和实体类的字符集都是UTF-8,同时将`useColumnLabel`和`useActualParamName`设置为`true`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值