2.7 中文乱码问题
在Web工程中,最常见的问题是乱码问题,而乱码一般都是由于中文的乱码设置问题,这里需要重点强调一下。
1.MyEclipse编码设置
①打开MyElipse,选择Window|Preferencef命令。
②在打开的首选项中,找到Gerneral|Workspace设置。
③找到Text File Encoding,默认为GBK。
④选择Other,更换为UTF-8。
⑤单击Apply和OK按钮即可。
2.乱码产生的原因
在最新版的Java语言中,默认使用的字符集为Unicode编码格式(字符集)来保存字符。产生乱码主要是在编码和解码的过程中产生的:
①编码(Unicode→GBK)。把Unicode这种编码格式对应的字节数组转换成某种本地编码格式(如GBK)对应的字节数组,从而保存。
②解码(GBK→Unicode)。把某种本地编码格式的字节数组转换成Unicode这种编码格式对应的字节数组。
③乱码:如果某个服务器默认使用ISO-8859-1编码格式,使用1个字节保存,则会出现中文乱码。即在编码和解码的过程中出现问题,产生乱码。
3.乱码解决
产生乱码的原因主要是编码和解码不匹配的问题,这里需要做以下设置,以解决这些问题:
①统一编码,在HTML 5中可以添加<meta charset="UTF-8">。
②在不是HTML 5的页面中,可以使用的解决方案:<meta http-equiv="content-type" content="text/html; charset=UTF-8">。
③在request处理时设置为utf-8编码:request.setCharacterEncoding("utf-8");。
④在response时做同样设置:response.setCharacterEncoding("utf-8");。
⑤在Servlet内部处理:response.setContentType("text/html;charset=utf-8");。
4.表单提交
如果表单有中文参数值,也需要注意编码问题。因为,当表单提交时,浏览器会对表单中的数据进行编码(会使用打开表单时的编码格式进行编码),而服务器默认情况下,会使用ISO-8859-1去解码,所以,会产生乱码问题。这里综合前文内容,提供两个解决方案。
方法一:
①先保证表单所在的页面按照指定的编码格式打开。即使用<meta http-equiv="content-type" content="text/html;charset=utf-8" />规范浏览器正在解析的数据类型和编码格式,HTML 5的用法参考前文的乱码解决,即添加<meta charset="UTF-8">。
②调用request.setCharacterEncoding("utf-8");的意思是告诉服务器,使用指定的编码格式进行解码。
③该方法只能用于post请求,并注意编码代码放在request.getParameter()方法前。
方法二:
①统一编码,在HTML 5中可以添加<meta charset="UTF-8">;。
②后台使用new String(name.getBytes("iso-8859-1"),"utf-8");对name进行编码的二次解析。
在表单提交处理中,推荐使用方法一,并使用post的表单提交,这样可以在很多情况下避免乱码的情况。