好多初学者会遇到,请求过去的信息内包含中文(一般会是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
{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{process(req, resp);}@Overrideprotected 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不是中国人发明的。让老外也尝尝编码的苦楚。

转载于:https://www.cnblogs.com/feiguo/p/3762268.html

字符编码乱码问题(servlet底层 编码大揭秘)相关推荐

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

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

  2. java printwriter乱码_Java servlet 使用 PrintWriter 时的编码与乱码的示例代码

    在前面的网页中的编码与乱码系列中,曾多次提到使用 servlet 方式构建的动态响应流,不过在那里都是直接使用字节流的方式,不过,更为常见的方式是使用字符流.而在前面,又谈到了 Java 字节流与字符 ...

  3. .中英文系统底层编码导致乱码问题

    转载:http://blog.sina.com.cn/s/blog_6ae7a3960100sc7h.html 标签: it 分类: 技术点滴 在程序中,若使用涉及到编码的方法,如getBytes() ...

  4. \xe4\xb8\xad\xe6\x96\x87 phython 字符编码乱码问题

    为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成"\xe4\xb8\xad\xe6\x96\x87"的形式? 为什么会报错"UnicodeEn ...

  5. day_08 字符编码乱码处理

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

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

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

  7. ASCII码、Unicode编码对照表 —— ASCII控制字符 Unicode编码 字符编码的前世此生

    ASCII控制字符  Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...

  8. python字符编码使用的是什么编码_不可不知的Python字符编码使用技巧(上)

    Python语言在网络爬虫领域应用的十分广泛.在爬虫的应用程序中,我们需要对网页上获取的数据进行处理,其中字符的编码.解码常常让人感到困惑:ASCII码.Unicode.字符编码什么的,很多朋友一直为 ...

  9. bug:生产问题,Golang解决csv文件用excel打开中文乱码问题及常见编码和BOM头关系

    bug:Golang解决csv文件用excel打开中文乱码问题 1 场景及分析 场景:今天在生成csv文件之后,测试发现用office和wps打开乱码 分析:经过测试之后发现使用记事本打开不乱码,同时 ...

最新文章

  1. jchdl - RTL实例 - And
  2. java开发checklist,Java API设计CheckList
  3. win系统下mysql忘记root账户密码的解决办法
  4. Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper
  5. OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
  6. [转]JS部分通用函数
  7. LeetCode数据库 178. 分数排名
  8. toolBar——工具栏
  9. 数据库链接池c3p0配置踩坑
  10. 双显卡笔记本安装linux,双显卡笔记本安装 Ubuntu 18.04 攻略
  11. 极光推送JPush使用Java SDK开发
  12. Industroyer:自震网病毒以来对工控系统的最大威胁
  13. android代码判断当前手机的手机号码是属于移动、联通、还是电信的
  14. 基于CNN的动态手势识别:Real-time Hand Gesture Detection and Classification Using Convolutional Neural Networks
  15. 什么是次世代游戏?次世代游戏前景怎么样?
  16. 团队作业第二次——需求分析
  17. 开启mongodb数据库命令行_MongoDB服务启动命令及DB创建
  18. linux内核的原子操作简述
  19. 位置式PID与增量式PID区别浅析(百度百科增量式PID讲解思路概念更明确清晰)
  20. 后端功能设计篇 --【定时任务】

热门文章

  1. matlab案例 光学,MATLAB仿真及其在光学课程中的应用.pdf
  2. oracle 赋予dorp,oracle表空间(tablespace)的增删改查(create/drop/rename,move/select)
  3. 计算机各个部件配合完成加减乘除(计组学习二)
  4. 面向对象设计——七大原则
  5. 基本Linux命令的用法
  6. MIT最新深度学习入门公开课
  7. VS2008 更改项目名称
  8. pickle.dump()把大量数据写入文件发生MemoryError解决方法
  9. nginx事件 -- 第六篇 stale event
  10. Tomcat错误解决