一、响应中的乱码

我们所看到的页面,是由服务器把内容放入响应(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. C# 调用 C++ DLL方法

    在C# 中,可以通过 DllImport 调用C++ 的非托管DLL程序. VS2010中C#调用C++的DLL示例: 一.新建C++ DLL程序 1.新建 C++ Win32项目,类型为DLL. 生 ...

  2. mysql按某个列执行1-N排名的问题

    对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列CREATE TABLE `salaries` (` ...

  3. 安装配置 flannel - 每天5分钟玩转 Docker 容器技术(59)

    上一节我们部署了 etcd,本节安装和配置 flannel. build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 buil ...

  4. Struts2学习笔记(一)——环境搭建

    1.创建Web项目并导入Struts2的主要jar包 在MyEclipse中新建Web项目,然后在lib目录下添加必须的jar包: 2.创建jsp页面 1).创建test.jsp页面: <bod ...

  5. 【Linux】新建用户 用户组

      案例 hadoop #添加用户组 sudo useradd -s /bin/bash -g hadoop -d /home/hadoop -m hadoop #添加用户 sudo passwd h ...

  6. 【LCT】一步步地解释Link-cut Tree

    简介 Link-cut Tree,简称LCT. 干什么的?它是树链剖分的升级版,可以看做是动态的树剖. 树剖专攻静态树问题:LCT专攻动态树问题,因为此时的树剖面对动态树问题已经无能为力了(动态树问题 ...

  7. SSM简明教程:简单的十步教你搭建人生第一个SSM框架[ SSM框架整合教程(Spring+SpringMVC+MyBatis) ]

    SSM_BookSystem SSM框架基础 SSM_BookSystem ---> Hello CRUD 说明:本项目目前包含基础的CRUD 日期:2017-05-01 22:25:37 作者 ...

  8. Java WEB工程搭建UEditor

    1. ueditor简介: UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... UEdito ...

  9. java 泛型简单使用

  10. HTTP协议知多少-关于http1.x、http2、SPDY的相关知识

    作为网站开发的基础协议,我们知道浏览器上都有输出http这四个字母,这意味着什么呢? 这就是最基础的HTTP协议. 逐浪君今天为各位大人准备了一些HTTP技术的知识,来和大家分享. 以下图为例: 这一 ...