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");
时间: 2024-10-13 01:25:57

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

(转载)关于JSP和Servlet乱码处理

JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我也是刚学,所以有不足之处希望谅解. 一.表单提交时出现乱码: 在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式.所以请求的时候便有get请求和post请求.以前我一直以为get请求和post请求方式出现的乱码的解决方式是一

Servlet乱码

Post方式乱码:request.setCharacterEncoding("utf-8"); GET方式: 1.修改tomcat解码字符集 conf/server.xml   URIEndoing="utf-8" 2.手动重新编码 username = URLEncoder.encode(username, "ISO-8859-1"); username = URLDecoder.decode(username,"utf-8"

MyEclipse +Servlet 乱码

用MyEclipse 新建了Web Project,然后建立了一个Servlet,在doGet方法中谢了简单的一句欢迎语句,本来以为平平常常的事情,但是却出错了,乱码问题,在网上找了一些帖子,说是设置编码: response.setCharacterEncoding("UTF-8"),但是我这里还是不起作用,然后又设置了Header,还是出错,最后将这两句话放在PrintWriter的前面,问题就解决了! public void doGet(HttpServletRequest req

servlet 乱码解决方法

一. servlet 发送的html 页面中文乱码 解决方法, 加入如下代码 response.setCharacterEncoding("UTF-8"); 在html页面加入 <!DOCTYPE html><html lang='en'><head><meta charset='utf-8' 二.request接受的乱码问题 解决方法, 加入如下代码 request.setCharacterEncoding("UTF-8"

Servlet乱码处理-------续集

前记 今天,  又 学习了一种 通过过滤器处理乱码的方法.下面我阐述通过过滤器处理乱码的思路. 第一步.编写过滤器类,实现Filter接口!代码如下: 第二步.配置web.xml,代码如下:

解决servlet乱码问题

1) request中的中文乱码 a) POST方式提交 在获得提交表单信息之前调用request.setCharactersEncoding("UTF-8"); b) GET方式提交 在Tomcat的server.xml中配置 <Service> <Connector URIEncoding="UTF-8"> ... </Connector> </Service> 2) reponse中的中文乱码 在通过respon

Servlet乱码问题解决

使用String重新进行编码 String name = new String(name.getBytes("ios-8859-1"),"utf-8") get请求乱码 request.setCharacterEncoding("utf-8"); 在server.xml中添加属性useBodyEncodingorURI=true post请求乱码 request.setCharacterEncoding("utf-8"); r

Servlet 中文乱码问题及解决方案剖析

一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码: 3.getBytes() 是通过平台默认字符集进行编码: 二.中文乱码出现 在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置:而在Servlet中,也会遇到中文乱码问题: 比如: OutputStream out = response.

Servlet内容中的中文显示乱码问题

一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码: 3.getBytes() 是通过平台默认字符集进行编码: 二.中文乱码出现 在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置:而在Servlet中,也会遇到中文乱码问题: 比如: OutputStream out = response.