一、响应中的乱码

我们所看到的页面,是由服务器把内容放入响应(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学习(一)之中文乱码问题的解决的更多相关文章

  1. JSP和Servlet的中文乱码处理

    JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我 ...

  2. Jsp页面中的中文乱码问题解决

    Jsp页面中的中文乱码问题解决 在编写Jsp页面的时候,发现写入其中的中文在浏览器浏览的时候会出现乱码的情况. 出现乱码的原因分析: 因为页面中对自己的编码格式的声明和页面的实际编码格式不相同,而浏览 ...

  3. Rhythmbox中文乱码问题的解决

    Rhythmbox中文乱码问题的解决 Rhythmbox是Ubuntu自带的一款很优秀的音乐播放器,但是在处理中文时却不太友好,导入歌曲时中文会变成乱码 这个问题也是很好解决的. ** 1.Ctrl+ ...

  4. Sublime Text 3中文乱码问题的解决(最有效)

    Sublime Text 3中文乱码问题的解决(最有效) Sublime Text 3是很好的代码编辑器,没有之一,因为她的性感高亮代码配色,更因为它的小巧,但是它默认不支持GBK的编码格式,因此打开 ...

  5. jquery.ajax的url中传递中文乱码问题的解决方法

    jquery.ajax的url中传递中文乱码问题的解决方法   JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQu ...

  6. (转)MySQL 插入数据时,中文乱码问题的解决

    MySQL 插入数据时,中文乱码问题的解决  原文:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当向 MySQL 数据库插 ...

  7. windows下mysql中文乱码, 配置解决方法

    内容源自:windows下mysql中文乱码, 配置解决方法 解决方法:打开mysql安装目录,打开my.ini文件(如果只有my-default.ini文件,先将其改名为my.ini!!!) 修改内 ...

  8. eclipse中js中文乱码问题的解决办法

    在Eclipse中编辑JS文件简直是一种折磨,但是却总是很无奈得要去适应. 这里说一下Eclipse中,编辑JS文件时候,出现中文乱码问题的解决办法. 这个问题很容易想到是文件编码的问题,因此通常是修 ...

  9. XAMPP下MYSQL中文乱码问题的解决

    XAMPP下MYSQL中文乱码问题的解决 现象描述: 安装完成XAMMP后,内置有MySQL数据库. 新建好自己的数据库后通过hibernate往表里面添加一些中文信息时全部乱码变成“??”. 问题解 ...

随机推荐

  1. Java面经 面试经验 互联网公司面试经验 后端面试经验

    应聘相关 声明: 1,程序员相关的哈 2,万事无定论,比如说,就算你小学毕业,但是java基础却扎实到变态,我相信open的公司还是会给你机会的. 3,心态很重要,虽然日常的心态不容易控制,面试那俩小 ...

  2. HTML——CSS的基础语法2

    一.盒模型 1-1.什么是盒模型? HTML5盒模型包括:内容(content).填充(padding.也叫做内边距).边框(border).边界(margin,也叫做外边距). 这些属性我们可以用日 ...

  3. HttpClient调用api

    /// <summary> /// 模拟调用API /// </summary> /// <param requestUrl="">请求地址&l ...

  4. php Yii2 报错unexpected '}'

    报错unexpected '}'一般是缺少":"导致的

  5. 阿里云服务器(Windows)如何下载文件

    背景:公司只有我一个技术,在我之前还有一个老技术,属于兼职状态,为了尽快熟悉公司网站及app项目情况,我联系了老技术,请他尽快将代码发给我,他说代码文件过大,问我能不能连上服务器下载.百度了很多,都不 ...

  6. uval 6657 GCD XOR

    GCD XORGiven an integer N, nd how many pairs (A; B) are there such that: gcd(A; B) = A xor B where1 ...

  7. jvm系列 (四) ---强、软、弱、虚引用

    java引用 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 我的博客目录 为什么将引用分为不同的强度 因为我们需要实现这样一种情 ...

  8. C++中static关键字作用总结

    1.先来介绍它的第一条也是最重要的一条:隐藏.(static函数,static变量均可) 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.举例来说明.同时编译两个源文件 ...

  9. Grails笔记一:windows8.1操作系统cmd下grails命令无效

    最近决定使用intellij idea工具来开发基于Grails框架的应用程序,,在安装好jdk 1.7以及配置好jdk和grails环境变量后进行grails测试,在win8.1的命令行窗口中输入以 ...

  10. WebForm页面间传值方法(转)

    Asp.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式.Asp .NET为我们提供了三种方式,一种是可以通过用QueryString来传送相应的值,再一种是通过session变量来传 ...