在 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页面的第一行,用来指定响应的类型和编码格式,contentType 为text/html就是html 内容,charset表示编码为 gb2312。这样浏览器就可以从响应中获得编码格式了。

这种<%@ %>的形式叫做jsp指令(directive),现在接触到的是page指令,还有 include和 taglib指令,我们会在后面陆续讲到。

3. 还需要在html 中指定编码格式。

<head>
<meta http-equiv="Content-Type" content="text/html;
charset=gb2312" />
<title>title</title>
</head>

meta 部分用来指定当前html 的编码格式,注意这一段要放在head 标签中,并且放到head 标签的最前面,如果不是最前面 ie下可能会出现问题,尤其是在 title 中有中文的情况下。

完成了以上三段检验,我们才能保证输出的 jsp页面会正常显示中文。

<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312" />
<title>title</title>
</head>
<body> <form action="test.jsp" method="post">
<label>用户名</label><label><input tyie="text" name="username"></label>
<br />
<input type="submit" value="提交">
</form> </body>
</html>

POST处理页面:

<%@ page contentType="text/html; charset=gb2312"%>
<%
request.setCharacterEncoding("gb2312");
%>
<%
out.print(request.getParameter("username"));
%>

最新文章

  1. 无法启动WP Emulator
  2. ECshop通过文章分类的ID实现不同模板
  3. BZOJ3776 : 警察局
  4. java io读书笔记(8)FileInputStream/FileOutputStream的应用
  5. 给产品经理讲技术,不得不懂的TCP和UDP
  6. Ubuntu 12.04 中安装ubuntu-tweak出错
  7. mailsend - Send mail via SMTP protocol from command line
  8. UVA - 1614 Hell on the Market(贪心)
  9. POJ 2774 最长公共子串
  10. Windows Media Player Plus
  11. spoj COT2 - Count on a tree II 树上莫队
  12. MSSQL-并发控制-1-Transaction
  13. css3 文字的设置
  14. 深入理解PHP的运行模式
  15. 机械臂——arduino、marlin固件、printrun软件【转】
  16. Android 蓝牙开发
  17. linux rescue 修复引导 与linux下修复windows引导
  18. golang---map类型
  19. Java并发编程的艺术(七)——Executors
  20. Python3 比较两个图片是否类似或相同

热门文章

  1. Learning to Rank算法介绍:RankSVM 和 IR SVM
  2. Intro to Python for Data Science Learning 3 - functions
  3. JS重要的内置对象
  4. 轻型池不支持执行公共语言运行时(CLR)。禁用以下两个选项中的一个: “clr enabled”或“lightweight pooling”解决方法
  5. 2018跳槽面试必备之深入理解 Java 多线程核心知识
  6. Putty Technical Note
  7. Python入门之软件开发目录规范
  8. 01: awk常用
  9. 20165310_JavaExp1
  10. Android 自动化测试介绍