JAVA 常见乱码问题及MYSQL character_set_server 设置

最近接手一个手机端服务端的程序(JAVA实现),我这边测试的话前台直接用的get方式传数据,

get请求编码方式和post请求提交编码方式不同,get是把数据直接放到url中,例如以上的uname,IE浏览器先对中文进行utf-8编码(一个中文3个字符表示 太长),继而为了缩短字符又用ISO8859-1编码后传递给服务器。服务器的doGet方法中要先进行ISO8859-1解码再utf-8解码才能看到中文。

post请求则在浏览器端把数据以utf-8的形式存储到http的请求体中,不用通过url传输,继而只要    request.setCharacterEncoding("utf-8");通知request以utf-8形式解码就行,因为request默认以ISO8859-1进行解码的。

第一种我们可以针对方法设置编码格式(这个设置必须在Writer之前,否则无效)

response.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

或者

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

第二种我们可以自己写过滤器(推荐方案)

private String charset;
	public void init(FilterConfig config) throws ServletException {
		System.out.println("init");
		// 获取web.xml文件里面的<init-param>
		// <param-name>encode</param-name>
		// <param-value>gbk</param-value>
		// </init-param> name为encode的值 为gbk
		charset = config.getInitParameter("encode");
	}

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

	public void destroy() {
		System.out.println("destroy");
	}
web.xml

<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>com.sjs.filter.EncodingFilter</filter-class>
	<init-param>
		<param-name>encode</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
/filter-mapping>

第三种我们直接修改tomcat的 server.xml

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8"/>

以上三种基本上就可以解决问题了,

但是我们还有一个问题,就是数据库(MYSQL)设置,一定要记得安装向导的时候一定你 Character Set设置成utf8的时候一定要选中(今天我碰到的问题就是这),

这里设置错了你mysql工具里面是查看数据库编码是看不到的,只能通过 show variables like "%char%"; 命令查看设置

红框框就是向导设置的编码,没有设置之前latin1,如果要修改这个值的话只能是运行mysql/bin/MySQLInstanceConfig.exe,重新设置

不要用命令( set @@character_set_server=‘utf8‘;)服务重启之后就无效了!这个地方设计的不太明白,改变这个值以后要重启,重启之后这个设置又会无效!

时间: 2024-10-11 04:35:41

JAVA 常见乱码问题及MYSQL character_set_server 设置的相关文章

[原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

MySQL编码设置方法 MySQL编码为utf8设置方法

mysql的默认编码是拉丁,我每次JSP制作网页用insert语句插入数据库时汉字都会显示成问号,安装mysql后,启动服务并登陆,使用show variables命令可查看mysql数据库的默认编码: 由上图可见database和server的字符集使用了latin1编码方式,不支持中文,即存储中文时会出现乱码.以下是命令行修改为utf-8编码的过程,以支持中文. (1)关闭mysql服务 [plain] view plaincopy service mysql stop (2)修改 /etc

MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题 收藏 MySQL中涉及的几个字符集

MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的.character-set-database:数据库字符集.character-set-table:数据库表字符集.优先级依次增加.所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集.character-set-client:客户端的字符

java中文乱码解决之道(一)-----认识字符集

沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.com来解决问题.阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都(更加包括我自己)没有一个清晰明了的认识,于是LZ想通过这系列博文(估计只有几篇)来彻底分析.解决java中文乱码问题,如有错误之处望各位同仁指出!当然,此系列博文并非LZ完全原创,都是在前辈基础上总结,归纳,如果雷同纯属借鉴-- 问

MySQL 字符集设置

/*************************************************************************** * MySQL 字符集设置 * 说明: * 数据库这块很多时候都会因为字符集不兼容导致数据通信异常,所以这边把 * MySQL的字符集设定为utf-8,这个比较通用. * * 2016-9-24 深圳 南山平山村 曾剑锋 **************************************************************

Java中乱码

Java开发中经常会遇到乱码问题.网上提供了各种解决乱问题的方案,比如说Http请求的中文乱码问题,可以通过URLEncoder和URLDecode去解决,虽然问题解决了,但是不优雅,你会发现为了解决乱码问题,代码中增加了几行代码,而且请求端和响应端都要增加URLEncoder和URLDecoder的代码,两边的人员都不爽,都指定了字符集了,还要转码,这样很不优雅. 其实解决乱码问题很简单,乱码出现的地方肯定是有数据流操作,我们需要秉承一个原则"用什么字符集写,就应该用什么字符集读".

[mysql]深入Mysql字符集设置[转载]

http://www.laruence.com/2008/01/05/12.html 基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如’A'.’B'等: • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding).例如,我们给字符’A'赋予数值0,给字符’B'赋予数值1,则0就是字符’A'的编码: • 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set).例如,给定字

Java学习-006-三种数据库连接 MySQL、Oracle、sqlserver

此文主要讲述在初学 Java 时,常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-31 10:46:48,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKEWbBntAjtKy  访问密码 bd58 以下为初学 Java 常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码,敬请参阅! MyS

如何处理java的乱码

为什么说乱码是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的! 如果中国的程序员不会遇到乱码,那么只有使用汉语编程.汉语编程是怎么回事,我也不大清楚. 我写这个不是讲解中英文之间的差距,解码等,我只是结合我遇到的乱码问题,然后做了一个解决乱码的总结. 1.utf8解决JSP中文乱码问题 一般说来在每个页面的开始处,加入: <%@ page language="java" import="java.util.