中文乱码总结

首先考虑数据库、xml配置、jsp页面等的字符集charset是否统一。在字符集统一的情况下,各种中文乱码可能出现的原因。

 

Web页面乱码

1、response的ContentType属性

比如可以在jsp页面中直接设置
  <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

在<head>标签中添加
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

还比如
  在Controller中直接使用 response.getWriter().write(jsonArray.toString()); 乱码
  需要加上 response.setContentType("text/html;charset=utf-8");

response.setContentType()的作用是使客户端浏览器,区分不同种类的数据,并根据不 
同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。 
例如:web浏览器就是通过MIME类型来判断文件是GIF图片,通过MIME类型来处理json字符串。 
Tomcat的安装目录\conf\web.xml 中就定义了大量MIME类型 ,可以参考。 
  response.setContentType(“text/html; charset=utf-8”); html 
  response.setContentType(“text/plain; charset=utf-8”); 文本 
  esponse.setContentType(“text/javascript; charset=utf-8”); json数据 
  response.setContentType(“application/xml; charset=utf-8”); xml数据

 

2、xml配置encoding

SpringMVC配置视图解析器编码

<bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="prefix" value="/WEB-INF/views/templates/" />
    <property name="templateMode" value="HTML5"/>
    <property name="characterEncoding" value="UTF-8"/>
</bean>

web.xml中配置过滤器

<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>true</param-value>
    </init-param>
</filter>

 

3、是否是JS导致了乱码
  看看有没有字符集charset的地方,与代码中的不一致

也可以直接给js添加字符集
  <script type="text/javascript" language="javascript" src="scripts/function.js" charset="gb2312"></script>

 

读取properties文件乱码

流的转换中常常出现中文乱码,解决办法:


1、在读的时候注意添加字符集

BufferedReader bf = new BufferedReader(new InputStreamReader(is, "UTF-8"));

InputStream is = resource.getInputStream();
try {
     BufferedReader bf = new BufferedReader(new InputStreamReader(is, "UTF-8"));
     props.load(bf);
} finally {
     s.close();
}

 

2、先转换成byte[]数组,再转换成String

 

打印到PDF字体乱码

服务器上没有对应的字体

 

原创文章,欢迎转载,转载请注明出处!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值