zoukankan      html  css  js  c++  java
  • 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");
  • 相关阅读:
    2013-10-31 《问题儿童居然一天两更!?》
    2013-10-31 《October 31st, 2013》
    2013-10-31 《三天里什么都没干……总之把目前为止的代码发了吧……》
    日怎么没人告诉我这博客可以改博文界面的显示宽度的
    俗话说打脸哦不打铁要趁热所以记录下替换图片的方法
    GUI好看码难写不是难写是难看我是说码难看不是GUI
    虽然保持了连续代码生产量但是仔细想想也没什么必要
    重写了电话本代码全面更新居然连续三天每天一个程序
    专注写字典三十年问你怕未又被编码卡了简直难以置信
    我就写个字典居然卡了两天重申一遍文字编码日你大爷
  • 原文地址:https://www.cnblogs.com/jinzhiming/p/5366804.html
Copyright © 2011-2022 走看看