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

最新文章

  1. 如何解决Linux下通过root无法远程登录
  2. 电子表格控件Spreadsheet 对象方法事件详细介绍
  3. [Unity] Unity3D研究院编辑器之自定义默认资源的Inspector面板
  4. cJSON_json包的C语言解析库
  5. Struts BaseAction工具类,封装Session,Request,Application,ModelDriven
  6. leetcode Database3
  7. 浅谈 qmake 之 pro、pri、prf、prl文件
  8. 【原】Storm Tutorial
  9. 转:单片机C语言中的data,idata,xdata,pdata,code
  10. Linux/ubuntu下的boost库安装
  11. 约瑟夫问题-Josephus--及实例说明
  12. fetch使用的常见问题及解决办法
  13. 洛谷 P2904 [USACO08MAR]跨河River Crossing
  14. Takeown、Cacls、Icacls-文件、文件夹夺权用法
  15. 移动APP及游戏推广,有预算为什么还起不了量
  16. python sorted函数多条件排序是怎么回事
  17. python的Web框架:初识Django
  18. R8&mdash;批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数
  19. flask基础之AppContext应用上下文和RequestContext请求上下文(六)
  20. mysql设置不区分大小写

热门文章

  1. 前端构建工具gulp介绍
  2. mysql连接报错 Host &lsquo;xxx&rsquo;is blocked because of many connection errors;unblock with 'mysqladmin flush-hosts'
  3. IIS7 配合 vs2013内置 LocalDB使用
  4. 洛谷U2641 木板面积(area)——S.B.S.
  5. CF687C. The Values You Can Make[背包DP]
  6. save()、saveOrUpdate()、merge()的区别
  7. AC日记——忽略大小写的字符串比较 openjudge 1.7 16
  8. AC日记——简单密码 openjudge 1.7 10
  9. Unity arm64
  10. sql语句常用说明与解析