先要了解关系
要了解servlet传来传去的中文问题,首先要知道客户端(浏览器)和服务器(这里讲tomcat)还有servlet之间的关系
简单说一下就是浏览器发送一个HTTP请求,然后服务器(比如tomcat)接收到后传递给servlet容器,实例一个servlet对象让他根据需求干活,这里就不讲这么清楚,因为不是这篇博客的主题
再来说传输的中文问题
这里用html作为例子进行传输
第一步
.html中加上
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
这句话的目的是告诉浏览器,等下发消息给服务器的时候,使用UTF-8编码
好像现在可以简化为 <meta charset="UTF-8">
第二步
服务器tomcat接收到字符码之后,会直接采用ISO-8859-1方式进行解码(这是它的默认机制)
例如:
用户输入“胡某人”,浏览器采用utf-8比如将其编码为 &#jshdsjhdeu; 然后发给tomcat
tomcat理应用同样的utf-8来解码,但它不管不顾,依旧采用自己ISO的方式来解码,比如解码成了 &…%…& 然后显示出来,
这就是所谓的乱码。 程序员的解决办法就是先用tomcat的ISO方式再将 &…%…& 编码,恢复成 &#jshdsjhdeu;
然后再用浏览器的utf-8方式将 阿伦 解码, 就成功得到了 “胡某人”
整个流程:
胡某人 → &#jshdsjhdeu → &…%…& → &#jshdsjhdeu → 胡某人
补充一下解码和编码,之前一直混乱
编码 和 解码 是什么,用utf-8来举例:
胡某 → &#x 963F;伦 ; 由左到右的过程,叫编码
胡某 ← &#x 963F;伦 ; 由右到左的过程,叫解码
中文变成字符是编码
字符变成中文是解码
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset= UTF-8"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html charset=gb2312">
</head>
<body>
<%out.print("JSP的中文处理");%>
</body>
</html>
先讲这么多,累了