servlet乱码问题总结
在学习时servlet乱码问题还是挺严重的,总结一下有三种情况
1.新建HTML页面后浏览出现乱码
2.以post形式请求时出现乱码
3.以get形式请求时出现乱码
让我们一个一个来解决吧
1.新建HTML页面后浏览出现乱码
<!DOCTYPE html>
<html>
<head>
<title>乱码示例</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="Content-Type"content="text/html;charset=utf-8">
</head>
<body>
Post示例 <br>
<form action="/EnocodingDemo/GetEncodingPage" method="post">
<label>信息:</label><input type="text" name="info"><br/>
<label>提交:</label> <input type="submit" value="提交">
</form>
</body>
</html>
我们新建一个网页后添加一些信息,用浏览器打开后发现会有乱码
遇到这种情况我们发现
代码里已经把charset设置成了utf-8了
<meta name="Content-Type"content="text/html;charset=utf-8">
但为什么不对呢?答案是它把标记用错了不应该用name要用http-equiv
把它修改成这样
<meta http-equiv="Content-Type"content="text/html;charset=utf-8">
重新reload一下,用ie打开
这里要及一下基础
name 属性提供了名称/值对中的名称。HTML 和 XHTML 标签都没有指定任何预先定义的 <meta> 名称。通常情况下,您可以自由使用对自己和源文档的读者来说富有意义的名称。 "keywords" 是一个经常被用到的名称。它为文档定义了一组关键字。某些搜索引擎在遇到这些关键字时,会用这些关键字对文档进行分类。
http-equiv 属性为名称/值对提供了名称。并指示服务器在发送实际的文档之前先在要传送给浏览器的 MIME 文档头部包含名称/值对。 当服务器向浏览器发送文档时,会先发送许多名称/值对。虽然有些服务器会发送许多这种名称/值对,但是所有服务器都至少要发送一个:content-type:text/html。这将告诉浏览器准备接受一个 HTML 文档。
它俩常用的名称为
详细请自己阅读 http://www.w3school.com.cn/tags/tag_meta.asp
2.以post形式请求时出现乱码
我们2.以post形式请求时出现乱码就用上面的HTML页面新建一个
新建一个servlet MyEncodingPage
POST请求的数据时作为请求体的一部分传递给服务器的,只要修改请求内的编码就可以。
request.setCharacterEncoding("UTF-8");
详细代码
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
String info = request.getParameter("info");
out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("<h1>Hello</h1>");
out.println("info = "+info);
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
3.以get形式请求时出现乱码
在地址栏输入默认是gbk,而get传参数是要先编码为iso8859-1再传的,所以要先用iso-8859-1来解码,再用utf-8编码为一个新字符串
String str= new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8");
- 【入门篇】Jetson TX2深度学习Inference初体验
- zeromq的安装,部署(号称最快的消息队列,消息中间件)
- OpenDaylight新建HelloWorld工程并集成版本
- 摸索出来的chrom调试前后台数据(Java&&Ajax)交互的方法分享一下咯!!!
- 机器学习:单词拼写纠正器python实现
- java.lang.Exception: 资源处理失败,失败原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown
- Server Tomcat v7.0 Server at localhost failed to start.
- Ovs+Dpdk简单实践
- Spark入门,概述,部署,以及学习(Spark是一种快速、通用、可扩展的大数据分析引擎)
- 创建基于MailKit和MimeKit的.NET基础邮件服务
- 把一个矩阵行优先展成一个向量,numpy.ravel() vs numpy.flatten()区别
- dataframe插入数据报错SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a
- python 对矩阵进行复制操作 np.repeat 与 np.tile区别
- python标准异常:中英文对比
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法