在学习时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");

servlet乱码问题总结的更多相关文章

  1. MyEclipse +Servlet 乱码

    用MyEclipse 新建了Web Project,然后建立了一个Servlet,在doGet方法中谢了简单的一句欢迎语句,本来以为平平常常的事情,但是却出错了,乱码问题,在网上找了一些帖子,说是设置 ...

  2. servlet 乱码解决方法

    一. servlet 发送的html 页面中文乱码 解决方法, 1.加入如下代码 response.setCharacterEncoding("UTF-8"); 2.在html页面 ...

  3. Servlet乱码问题

    数据像水流一样从一个地方流向另一个地方. 文本流是特殊的二进制流. 既然提到乱码问题,那就必然是用错误的编码去解释二进制流. 在传输过程中必然都是以二进制流传输的. 所以,我们需要考虑的是: 有几个数 ...

  4. tomcat8 到idea控制台和servlet乱码问题

    作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1.问题重现 ​ Tomcat8 部署到idea上时候,控制台出现的乱码 如图,本来框出来的是乱码 其中,"测试"这个是在serv ...

  5. Servlet乱码问题解决

    对于请求参数的编码处理基本上分为get和post两种情况. 1.POST index.html <!DOCTYPE html> <head> <meta http-equ ...

  6. Servlet乱码

      request.setCharacterEncoding():是设置从request中取得的值或从数据库中取出的值 (只管post方式提交的问题///get需在server.xml中的: < ...

  7. servlet乱码以及解决

    //  浏览器提交的数据是000110011(码表中对应的<编码> )等东西. // 浏览器以什么<码表>打开浏览器(而空中浏览器使用的编码是:<meta http-eq ...

  8. 解决servlet乱码问题

    1) request中的中文乱码 a) POST方式提交 在获得提交表单信息之前调用request.setCharactersEncoding("UTF-8"); b) GET方式 ...

  9. Servlet乱码解决

    后端收前端 1.post乱码 可以通过 request.setCharacterEncoding("utf-8");  这样在后端可以接收中文 2.get乱码(手动解决) 可以通过 ...

随机推荐

  1. JavaScript Patterns 5.7 Object Constants

    Principle Make variables shouldn't be changed stand out using all caps. Add constants as static prop ...

  2. MySQL online ddl原理

    背景 dba的日常工作肯定有一项是ddl变更,ddl变更会锁表,这个可以说是dba心中永远的痛,特别是执行ddl变更,导致库上大量线程处于“Waiting for meta data lock”状态的 ...

  3. crontab执行不生效-【问题篇】

    背景:shell脚本每隔两分钟从数据库取数据库放到脚本所在目录,做好计划任务发现不生效. 解决:脚本中文件路径问题 测试:在/data/test目录下写的脚本,直接在本目录touch以分钟结尾的文件. ...

  4. 纯css实现照片墙3D效果

    每张照片都有美丽的故事.美好的回忆.家居中的照片墙则帮你展现出这些承载着家庭重要记忆的照片,除了用画框装饰照片挂在墙上外,照片墙还可以演变为手绘照片墙.也经常在网上看到一些关于照片墙的特效案例,决定自 ...

  5. arcgis 随手记

    1,ArcGISDynamicMapServiceLayer   3.0  用  4.1 以后用MapImageLayer 代码如下: <!DOCTYPE html> <html&g ...

  6. POSIX, Bash, GPL etc

    POSIX , SUS, XSI Portable Operating System Interface POSIX是给Unix/Linux系统使用的通用调用接口(SCI, System Call I ...

  7. 010 使用netmap API接管网卡,接收数据包,回应ARP请求

    一.本文目的: 上一节中,我们已经在CentOS 6.7 上安装好了netmap,也能接收和发送包了,这节我们来调用netmap中的API,接管网卡,对网卡上收到的数据包做分析,并回应ARP请求. 二 ...

  8. python可分组字典

    # -*- encoding: UTF-8 -*- from collections import defaultdict class News(object): def __init__(self, ...

  9. [转]阿里云配置mysql远程连接

    默认是不能用客户端远程连接的,阿里云提供的help.docx里面做了设置说明,mysql密码默认存放在/alidata/account.log 首先登录: mysql -u root -h local ...

  10. WinCE项目应用之RM905a+医用放射性核素活度计

    RM905a+医用放射性核素活度计大概是我做的第一个WinCE项目,RM905a的升级版.RM905a是曾经的老大LZF 2000年左右的作品,基于51单片机开发,数码管显示,稳定可靠,好似目前还在生 ...