JSP学习(一)之中文乱码问题的解决
一、响应中的乱码
我们所看到的页面,是由服务器把内容放入响应(response)中,然后发送给浏览器的。如果响应中的数据无法被正常解析,就会出现中文乱码。为什么英文不存在乱码问题?因为无论是ISO-8859-1/gb2312/utf-8,它们对于英文的编码方式都是一样的,即一个字符为8位。而中文就比较混乱,在gb2312下一个中文占16位,而在utf-8下占24位。浏览器在不知道编码方式时,就会把这些字符从中间截断,在显示的时候自然就乱码了。因此想要解决乱码问题,就要告诉浏览器我们采用了什么样的编码方式。这需要以下几步:
1.因为服务器首先要从jsp中读取数据,经过处理后写入相应,因此首先要确定jsp文件的编码格式。windowXP系统默认的编码格式是gb2312。
2.在http响应(response)中声明编码方式,方法为:<%@ page contentType="text/html; charset=gb2312"%>
该内容要放在jsp页面的第一行,这样浏览器就知道响应的编码格式了。
3.还要在html中指定编码格式:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>title</title>
</head>
meta部分指定了当前html的编码格式。注意这一段要放在head的最前面,否则在IE下可能会有问题。
二、请求中的乱码
1.Post乱码
当使用Post提交并使用ISO8859-1编码时,如果使用默认方式从请求获取数据,则中文一定会出现乱码。为了解决这个问题,我们需要在响应的JSP中添加:
request.setCharacterEncoding("gb2312");
可见,Post的乱码问题很好解决。这是因为通过Post方式提交的数据均以二进制的形式附加在http请求的body部分发送,因此只需要在后台指定编码格式即可。
2.GET乱码
点击超链接时,默认的提交方式为Get。这种方式会直接将参数附加到URL后面进行提交,无法使用以上方法进行处理。那这也没有什么特别方便的方法,只能对参数重新进行编码,示例如下:
<%
String username = request.getParameter("username");
byte[] bytes = username.getBytes("iso-8859-1");
String result = new String(bytes, "gb2312");
out.print(result);
%>
简写的话如下所示:
<%=new String(new String(request.getParameter("username").getBytes("iso-8859-1"), "gb2312")%>
可见,这种提交方式的缺点是所有的中文都需要转码,比较麻烦。因此最好不要将中文参数写入超链接,form尽量使用Post来提交。
JSP学习(一)之中文乱码问题的解决的更多相关文章
- JSP和Servlet的中文乱码处理
JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我 ...
- Jsp页面中的中文乱码问题解决
Jsp页面中的中文乱码问题解决 在编写Jsp页面的时候,发现写入其中的中文在浏览器浏览的时候会出现乱码的情况. 出现乱码的原因分析: 因为页面中对自己的编码格式的声明和页面的实际编码格式不相同,而浏览 ...
- Rhythmbox中文乱码问题的解决
Rhythmbox中文乱码问题的解决 Rhythmbox是Ubuntu自带的一款很优秀的音乐播放器,但是在处理中文时却不太友好,导入歌曲时中文会变成乱码 这个问题也是很好解决的. ** 1.Ctrl+ ...
- Sublime Text 3中文乱码问题的解决(最有效)
Sublime Text 3中文乱码问题的解决(最有效) Sublime Text 3是很好的代码编辑器,没有之一,因为她的性感高亮代码配色,更因为它的小巧,但是它默认不支持GBK的编码格式,因此打开 ...
- jquery.ajax的url中传递中文乱码问题的解决方法
jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQu ...
- (转)MySQL 插入数据时,中文乱码问题的解决
MySQL 插入数据时,中文乱码问题的解决 原文:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当向 MySQL 数据库插 ...
- windows下mysql中文乱码, 配置解决方法
内容源自:windows下mysql中文乱码, 配置解决方法 解决方法:打开mysql安装目录,打开my.ini文件(如果只有my-default.ini文件,先将其改名为my.ini!!!) 修改内 ...
- eclipse中js中文乱码问题的解决办法
在Eclipse中编辑JS文件简直是一种折磨,但是却总是很无奈得要去适应. 这里说一下Eclipse中,编辑JS文件时候,出现中文乱码问题的解决办法. 这个问题很容易想到是文件编码的问题,因此通常是修 ...
- XAMPP下MYSQL中文乱码问题的解决
XAMPP下MYSQL中文乱码问题的解决 现象描述: 安装完成XAMMP后,内置有MySQL数据库. 新建好自己的数据库后通过hibernate往表里面添加一些中文信息时全部乱码变成“??”. 问题解 ...
随机推荐
- Mac OS X 终端命令开启功能
1.系统目录下显示资源库2.Finder显示隐藏文件3.Xcode卸载4.在Finder标题栏显示完整路径5.去掉窗口截屏的阴影6.强制Safari在新标签中打开网页7.改变截屏图片的保存位置 1.系 ...
- 安装完iis后本机用IP可以访问,别的电脑不能访问
局域网IIS无法访问的解决方法 无法访问局域网内其它电脑中的IIS,自己可以访问,但别的电脑不行一般发生这种情况时操作系统是XP第二版. 具体操作如下:1.打开控制面版2.打开Windows防火墙 5 ...
- canvas图形处理和进阶用法
前面的话 上一篇博客介绍了canvas基础用法,本文将更进一步,介绍canvas的图形处理和进阶用法 图形变换 图形变换是指用数学方法调整所绘形状的物理属性,其实质是坐标变形.所有的变换都依赖于后台的 ...
- HTML基础进阶
[toc] HTML表单 form标签 <form> 标签代表一个表单,表单用于向服务器传输数据. 标签能够包含 <input> ,可以是文本字段,复选框,单选框或提交按钮等. ...
- JAVAWEB项目如何实现验证码 (转)
JAVAWEB项目如何实现验证码 2012-12-21 21:19 56026人阅读 评论(36) 收藏 举报 .embody { padding: 10px 10px 10px; margin: 0 ...
- mysql 时间格式化
将时间转为格式化的字符串 select date_format(now(),'%Y%m%d'); 将时间字符串转为时间戳 select unix_timestamp('2017-07-14') 将时间 ...
- 新鲜出炉的JSON,拿走不谢!
一.JSON简介 1.JSON全称是JavaScript Object Notation即JavaScript对象标记法. JSON是一种轻量级(Light-Weight).基于文本的(Text-Ba ...
- Eclipse安装Hibernate插件快速生成配置文件
Eclipse安装Hibernate插件快速生成配置文件 插件链接: http://pan.baidu.com/s/1mi3KVtI 密码: kmjg 1.安装插件: 1.在eclipse顶部窗口he ...
- 第二章 R语言数据结构
R语言存储数据的结构包括:标量.向量.矩阵.数组.数据框和列表:可以处理的数据类型包括:数值型.字符型.逻辑型.复数型和原生型. 数据结构 向量 向量是用来存储数值型.字符型或逻辑型数据的一维数组.单 ...
- Requests抓取有道翻译结果
Requests比urllib更加方便,抓取有道翻译非常的简单. import requests class YouDao(): def __init__(self,parm): ...