好多初学者会遇到,请求过去的信息内包含中文(一般会是get方式提交过去的请求会出现)。好郁闷,这是为什么呢。有下面分析下,说的不好可以吐槽

话说我们能遇到这种编码的问题,归根结底就是这  这 web开发不是中国人开发的,中国文化博大精深,四大发明渊源流传,可惜,我们太自己为是了,来了个闭关锁国政策,弄得中国跟不上时代的步伐,不潮了,落伍了,互联网时代被西方人抢了个先,发明了,我们只能用别人的了。我们也知道,西方讲的是英语,所以他们采用的编码格式是iso-8895-1。而这  这种编码方式只占两个字节,不适合我们中文(不光是中文,其他的语言也不怎么支持,嘿嘿),所以,为了世界各国的语言都支持,Ken Thompson(有一外国人,where is 中国人),发明了utf-8编码格式,是可变长度字符编码的万能码(又有多少真正被堪称万能的,牛)。其中,中文占3个字节。所以  所以想服务器发送请求的时候,get方式都要转码。

废话不多说,正题例子才霸气。

package com.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class Register extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
process(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
process(req, resp);
} public void process(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html"); String usernmae = req.getParameter("username");
String gender = req.getParameter("gender");
String[] interest = req.getParameterValues("interest");
String address = req.getParameter("address");
String connent = req.getParameter("connent"); usernmae = new String(usernmae.getBytes("iso-8859-1"),"UTF-8");//字符的解码和转码,iso-8859-1代表的2个字节大小,utf-8各个国家中的
gender = new String(gender.getBytes("iso-8859-1"),"UTF-8");
connent = new String(connent.getBytes("iso-8859-1"),"UTF-8");
address = new String(address.getBytes("iso-8859-1"),"UTF-8"); System.out.println(usernmae);
System.out.println(gender);
System.out.println(interest.length);
System.out.println(address);
System.out.println(connent);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="">
<title>Insert title here</title>
<script type="text/javascript">
function validate()
{
var username = document.getElementsByName("username")[0];
if(username.value.length < 1)
{
alert("用户名不能为空");
} var gender = document.getElementsByName("gender");
if(!gender[0].checked && !gender[1].checked)
{
alert("请选择性别");
} var interest = document.getElementsByName("interest"); var n = 0;
for(var i = 0; i < interest.length; i++)
{
if(interest[i].checked)
n++;
}
if(n < 1)
{
alert("兴趣至少选择一个");
}
var address = document.getElementsByName("address"); }
</script>
</head>
<body> <form action="Register">
用户名:<input name="username" type="text"><br>
性别:男<input type="radio" value="男" name="gender">&nbsp;&nbsp;&nbsp;女<input type="radio" value="女" name="gender">
<br>
兴趣:足球<input type="checkbox" name="interest" value="足球">&nbsp;&nbsp;
蓝球<input type="checkbox" name="interest" value="篮球">&nbsp;&nbsp;
羽毛球<input type="checkbox" name="interest"value="羽毛球">&nbsp;&nbsp;
拍球<input type="checkbox" name="interest" value="排球">&nbsp;&nbsp;<br>
地址:<select name="address">
<option value="上海">上海</option>
<option value="天津">天津</option>
<option value="济南">济南</option>
<option value="德州">德州</option>
</select>
<br>说明:<textarea name="connent" rows="15" cols="20"></textarea><br>
<input type="submit" onclick="validate()" value="充值">
&nbsp;</form>
</body>
</html>
usernmae = new String(usernmae.getBytes("iso-8859-1"),"UTF-8");
理解,usernmae.getBytes("iso-8859-1")就是以iso-8859-1的方式得到username。然后新建一个string类型的字符串,将其编码格式定位utf-8,就完活了,简单不,不过,还是那句话,为什么web不是中国人发明的。让老外也尝尝编码的苦楚。

字符编码乱码问题(servlet底层 编码大揭秘)的更多相关文章

  1. JAVA ,SSH中文及其乱码问题的解决 6大配置点 使用UTF-8编码

    JSP,mysql,tomcat下(基于struts2)中文及其乱码问题的解决 6大配置点 使用UTF-8编码 目前对遇到J2EE 开发中 中文及其乱码问题,参考网上资料做个总结, 主要是6大配置点: ...

  2. javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码

     乱码是一个经常出现的问题 请求中,参数传递的过程中也是经常出现乱码的问题 本文主要整理了请求乱码中的问题以及解决思路   先要理解一个概念前提: 编码就是把图形变成数值码所以说: 图形的字符  -- ...

  3. jsp连接数据库的乱码问题 servlet请求参数编码处理get post

    1.在所有需要读取数据的地方用下面的方式.同时jsp必须统一编码,如我都是UTF-8 String userName= new String(request.getParameter("us ...

  4. servlet请求编码与响应编码问题(编码不一致可能会导致乱码)

    html中的编码 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&g ...

  5. day_08 字符编码乱码处理

    Python3默认编码是unicode:而Python2是ASCII码.Windows环境默认是gbk编码. 常见编码错误原因: 1. Python解释器的默认编码 2. Python源文件文件编码 ...

  6. java web 学习总结之 Servlet/JSP 编码问题

    Servlet和JSP编码问题 字节流: 1.得到OutputStream  字节流 OutputStream os = response.getOutputStream();   用默认编码输出数据 ...

  7. get请求中文乱码及get,post编码探究

    在我使用get请求进行查询的时候遇到一个问题: 当我的请求参数中有中文时,出现乱码. 可是即使我设置了Spring的characterEncodingFilter,也还是出现乱码. 原因:tomcat ...

  8. 编码(1)学点编码知识又不会死:Unicode的流言终结者和编码大揭秘

    学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 http://www.freebuf.com/articles/web/25623.html 如果你是一个生活在2003年的程序员,却不了 ...

  9. cookie的中文乱码问题【URL编码解码】

    先搞明白为什么会乱码,为什么要转码: 在tomcat 8 之前,cookie中不能直接存储中文数据.需要将中文数据转码,一般采用URL编码(%E3).在tomcat 8 之后,cookie支持中文数据 ...

随机推荐

  1. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)

    相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...

  2. JFinal学习 & Gradle配置续 & Tomcat配置

    接上一篇对Gradle的学习,再用JFinal项目再建一个. 参考了这篇文章:https://my.oschina.net/u/1010578/blog/390094 但是其中没有代码,所以看了这篇  ...

  3. win10拷贝文件卡顿的问题-竟然是winrar搞的

    win10拷贝文件卡顿的问题-竟然是winrar搞的 学习了: http://www.w10zj.com/Win10xy/Win10xf_3378.html 没想到你竟然是这样的WinRAR 去除了s ...

  4. 1、CRM2011编程实战——清空指定页签以下的全部选项,并对页签以下的指定控件进行操作

    需求:当页面载入时,"呼叫编号"保持不变,"任务号"自己主动更新."接报时间"和"发生日期"自己主动设置为当天日期和时间 ...

  5. Git以及github的使用方法(五),暂存区和工作区

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...

  6. Vue beforeRouteEnter 的next执行时机

    背景 今天在用vue实现界面的时候,想在beforeRouteEnter钩子函数中去获取数据,然后通过next方法设置到跳转页面的实例中,结果发现数据一直没办法在界面渲染的时候赋值,苦思不得其解,遂g ...

  7. UIView 的 autoresizingMask 属性 详解。

    转载自:liubo0_0的专栏  链接网址:http://blog.csdn.net/liubo0_0/article/details/7085935 在 UIView 中有一个autoresizin ...

  8. 利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

    利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理   2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论: ...

  9. jvm基础(2)

    7.类装载器 (1)class装载验证流程: A加载.这是装载类的第一个阶段,执行的动作包括:取得类的二进制流,转为方法区数据结构,在java堆中生成对应的java.lang.Class对象. B链接 ...

  10. YUV格式

    http://blog.csdn.net/u011270282/article/details/50696616 http://blog.csdn.net/acs713/article/details ...