中文乱码处理

简介: 由于编码方式的不同,各种编码处理的语言不通,将导致中文乱码问题: 一、几种常见的编码方式: 1、ISO-8859-1:属于单字节编码,最多表示的字符范围是0-255,应用于英文系列。 2、GB2312/GBK:属于汉字的国标码,专门表示汉字,是双字节编码,还兼容ISO-8859-1编码,其中GBK同时表示繁体字和简体字,而GB2312只能表示简体字。

由于编码方式的不同,各种编码处理的语言不通,将导致中文乱码问题:

一、几种常见的编码方式:

1、ISO-8859-1:属于单字节编码,最多表示的字符范围是0-255,应用于英文系列。

2、GB2312/GBK:属于汉字的国标码,专门表示汉字,是双字节编码,还兼容ISO-8859-1编码,其中GBK同时表示繁体字和简体字,而GB2312只能表示简体字。

3、Unicode:属于同一编码,可以表示所有语言的字符,但它是定长双字节编码,故不兼容ISO-8859-1编码。

4、UTF-8:Unicode编码不兼容ISO-8859-1,而且占用空间更多,不便于传输和存储,UTF-8兼容ISO-8859-1而且表示所有语言字符。

二、产生乱码的几种原因:

1、在JSP编译成class文件时,如果没有指定编码格式,系统默认的编码格式为ISO-8859-1。

2、表单通过POST方法提交,未指定提交编码格式,则会默认ISO-8859-1编码提交。

3、表单通过GET方法提交,Tomcat会以默认的(ISO-8859-1)编码格式,追加到URL上,将导致乱码。

三、解决方法:

1、连接数据库时,指定编码格式:jdbc:mysql://localhost:3306/test&useUnicode=true&characterEncoding=UTF-8;

2、通过设置接收和响应的编码格式:request.setCharacterEncoding("GBK");response.setContentType("text/html;charset=GBK");

3、通过过滤器设置,其实这个和第二种是同样的道理的:

package com.song.EncodingFilter;

import java.io.*;
import javax.servlet.*;

public class EncodingFilter implements Filter{

	private String encoding = null;
	private FilterConfig config = null;

	public void destroy(){
		this.encoding = null;
		this.config = null;
	}

	public void doFilter(ServletRequest req,
						ServletResponse res,
						FilterChain chain)
						throws ServletException, IOException{
		String type = getEncoding(req);
		if(type != null){
			req.setCharacterEncoding(type);
		}
		chain.doFilter(req,res);
	}

	public void init(FilterConfig config)throws ServletException{
		this.config = config;
		this.encoding = config.getInitParameter("encoding");
	}

	public String getEncoding(ServletRequest req){
		return this.encoding;
	}
}
<filter>
	<filter-name>EncodingFilter</filter-name>
	<filter-class>com.song.EncodingFilter.EncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>GBK</param-value>
	</init-param>
  </filter>
  <filter-mapping>
	<filter-name>EncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>

4、因GET方式是吧参数添加到URL上,这些方法对于GET方法提交的话将不会起到作用,对于GET提交,我们可以在Tomcat的server.xml中设置编码格式:如下:

<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" 

URIEncoding=“GBK”/>

还有一种就比较麻烦点了,不过使用的也挺多的:String name = new String(username.getBytes("ISO-8859-1"),"GBK");

目录
相关文章
|
Arthas Java 测试技术
【线上问题排查】死锁和僵尸进程排查
【线上问题排查】死锁和僵尸进程排查
378 1
|
12月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
344 2
|
12月前
|
JavaScript Java Kotlin
Kotlin教程笔记(5) - 常量与变量
本教程详细解析了Kotlin中的常量与变量,包括运行时常量(val)和编译期常量(const val)的区别及应用,以及变量的定义与类型推导机制。适合希望深入了解Kotlin语法的学习者。
72 1
|
Java 数据安全/隐私保护 Spring
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
|
SQL 架构师 大数据
提升企业级数据处理效率!3.0 系列版本的四个集群优化点详解
为了帮助企业更好地进行大数据处理,我们在此前 TDengine 3.x 系列版本中进行了几项与集群相关的优化和新功能开发,本文将对这几项重要优化进行详细阐述。
217 0
|
人工智能 监控 数据挖掘
数字化转型中的项目管理架构:创新与挑战
【8月更文第7天】简述数字化转型对企业的重要性及其对项目管理带来的影响。 - 概述数字化转型下项目管理架构所面临的机遇与挑战。
725 0
|
API 数据库 数据库管理
Flask Web开发基础:数据库与ORM实战
该文介绍了如何使用 Flask、SQLAlchemy 和 SQLite 实现数据库操作。首先,通过创建虚拟环境和安装 flask-sqlalchemy(版本2.5.1)及 sqlalchemy(版本1.4.47)来设置环境。接着,配置数据库URI,定义User和Movie模型类表示数据库表,并通过db.create_all()创建表。文章还展示了如何插入、查询、更新和删除记录,强调了db.session.commit()在保存更改中的关键作用。查询涉及filter、order_by等方法,提供了一系列示例。
448 1
|
Java 测试技术 数据处理
Java一分钟之-TestNG:高级测试框架
【6月更文挑战第4天】TestNG是Java的高级测试框架,扩展了JUnit,支持数据驱动、参数化、测试分组、依赖和并行测试,提高自动化测试效率。本文介绍了TestNG的核心特性,如`@DataProvider`和`@Parameters`注解,以及常见问题和解决策略,如正确使用测试生命周期方法和处理数据驱动测试中的数据。通过示例展示了如何进行数据驱动测试,帮助读者更好地理解和应用TestNG。
471 0
Java一分钟之-TestNG:高级测试框架
|
Linux Shell
【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】
【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】
|
Kubernetes Cloud Native Java
Docker打包制作openoffice镜像(Dockerfile方式),并处理中文乱码
鉴于目前,云原生k8s的部署方式,越来越广泛。那我们也应该要使用docker的方式部署openoffice。 这个部署的第一步,就是要有一个docker镜像,那我们今天就来讲讲,如何制作openoffice的docker镜像包。 当然啦,openoffice的docker镜像包,我们可以从docker hub仓库,直接拉别人制作好的镜像包。
1058 0