`

GET请求的中文乱码问题及处理意义

    博客分类:
  • java
 
阅读更多

首先看一段乱码的程序:

 

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  //0设置编码

  request.setCharacterEncoding("UTF-8");

  String username=request.getParameter("username");

  String password=request.getParameter("userPwd");

  System.out.println("处理之前:"+username+":"+password);

    //此时输出的结果:处理之前:胡玉勉:aa1234bb---也就是说中文字符本身的编码还是不对。

  //如下处理

  username = new String(username.getBytes("ISO8859-1"),"UTF-8");

  System.out.println("处理之后:"+username+":"+password);

  response.setContentType("text/html;charset=UTF-8");

  ServletOutputStream out=response.getOutputStream();

  out.println(username);

  out.println(password);

 }
 
乱码原因的分析:

get请求的原理图:

1.数据解析编码:指的是html页面form表当数据提交时候的编码方式,这个编码方式和页面编码是统一的,这里设置为UTF-8

2.GET请求的的请求数据,并不在请求体体中,而是在请求行中的?之后。而整个请求数据,包括请求行,请求头,请求体都会通过http协议发送到服务端去处理。(HTTP协议时不支持中文的,默认编码:ISO8859-1)

 

对比post请求,post请求的的请求数据都包含在请求体中,当发送了了服务端的时候,通过设置request.setCharacterEncoding("UTF-8"),就能够使得数据传输到服务端的时候,能够将其解析成utf-8的数据。

但是,这样的设置编码的操作对请求行中的数据缺失无效的。

3.前面说了数据时通过http协议的方式发送到服务端,而请求行的信息(原始状态下是UTF-8编码)经过http协议进行传输的时候,http协议对其进行了默认编码的编码操作。并发送到了服务端,而服务端类似post请求的处理方式,对其有没有作用。

那么,服务段应该如何对这样的乱码,就行解码,让其还原成UTF-8编码呢。实际上就是还原成原始数据的编码?

(乱码产生的核心本质:源编码和读取显示的编码不一致)

思路:找到源编码的二进制,然后重新用UTF-8进行解码就可以了。

4.解决办法:

服务端:String username=request.getParamter("username");----这是获得的ISO8859-1编码的乱码数据

 

解码:

 

 

username.getBytes("ISO8859-1");-----这样就获得了原始数据。

而原始数据就是按照UTF-8编码的,那么此时,只需要将其变成UTF-8的字符串数据就ok

new String(username.getBytes("ISO8859-1,"UTF-8""));

最终表现在上面的程序中,值处理之前,是乱码的,通过解码在还原的操作,中文则不再乱码。

 

仍然存在的疑惑:

1. response.setContentType("text/html;charset=UTF-8");

如果没有手动解码的代码username.getBytes("ISO8859-1"); 通过上述方式设置response编码,将其发送到浏览器,没有出现乱码。

这种情形是合理的吗?是不是上述操作的底层也是用过来类似 username.getBytes("ISO8859-1") 这样的解码方式?(可以这么理解)

 

2.如果是post请求的时候,请求内容在请求体中,不也要通过http协议对其进行编码吗?为什么数据发送到服务端,就直接可以通过

request.setCharcterEncoding(UTF-8)对数据进行解码?(视频里面提到流的处理方式)

这里面,request.setCharacterEncoding(UTF-8)值能请求体中的流进行处理

 

那么这个还有一个问题就是,

  response.setContentType("text/html;charset=UTF-8");

  ServletOutputStream out=response.getOutputStream();

  out.println(username);

  out.println(password);

了这样的操作以后,即使没有手动解码,在服务端通过上述流操作,将数据输出到浏览器中,没有出现乱码。

 

那么对于get请求,手动解码的意义是什么呢。后来明白了,因为大多数情况下,还是要将数据信息存储到数据库中个,

存储到数据库的操作,可不是流的操作, 那么这个时候,如果这届存储到数据库的情况下,就会乱码的。所以通过手动解码的方式的意义还是大大的。

 

当然,一般不用字节流来处理文本数据,上述代码,改成response.getWriter的方式处理就ok。

分享到:
评论

相关推荐

    解决boa服务器get/post请求中文乱码问题

    在处理HTTP请求时,尤其是GET和POST请求,如果服务器没有正确配置以识别和处理中文字符,就可能出现乱码问题。中文字符通常以UTF-8编码发送,因此服务器需要能够识别并转换这种编码。 解决方法: - 配置 boa.conf...

    解决了中文乱码的http的get和post请求demo

    总的来说,解决HTTP请求中的中文乱码问题,核心在于正确地设置编码格式,并在发送请求前对中文数据进行编码。无论是GET还是POST请求,都需要确保客户端和服务器之间对字符编码的一致理解。通过阅读提供的文档和示例...

    get、post请求中文乱码处理方式一

    本文将详细阐述GET和POST请求中文乱码的处理方式,以帮助开发者解决这类问题。 首先,我们需要了解为什么会出现中文乱码。在HTTP请求中,数据通常是按照ASCII编码进行传输的,而中文字符通常使用UTF-8或其他多字节...

    过滤器实现get请求和POST请求的中文乱码问题

    使用过滤器实现GET请求和POST请求的中文乱码问题,只需在自己的Web应用中的web.xml中配置该filter即可使用。

    java解决解决get中文乱码问题

    在Java Web开发中,经常遇到的一个问题是处理GET请求中的中文参数时出现乱码。这个问题主要是因为浏览器发送GET请求时,参数默认使用ISO-8859-1编码格式,而服务器端通常采用的是其他编码(如GBK、UTF-8等)。当...

    get请求乱码问题 java

    下面将详细解析GET请求乱码的原因、解决方案以及如何正确处理字符编码,确保数据传输的准确性。 ### GET请求乱码的原因 #### 1. 编码格式不一致 GET请求中的参数是通过URL传递的,而URL在传输过程中可能会被多次...

    Java Http请求传json数据乱码问题的解决

    在Java进行HTTP请求时,通常会遇到数据传输出现乱码的问题,尤其是在使用JSON格式传输数据,且数据中包含中文字符时更为常见。在HTTP协议中,字符编码的正确处理对于数据的正确传输至关重要。以下将详细介绍在Java中...

    jmeter5.0 解决请求参数中文乱码ApacheJMeter_http.jar

    这个修改过的jar文件应该包含了修复乱码问题的更新,可能是调整了请求参数的编码处理逻辑,使其能够正确识别和处理中文字符。用户只需将此修改后的`ApacheJMeter_http.jar`文件放到JMeter安装目录下的`lib/ext`子...

    JSP中 ajax的get请求的中文乱码问题的解决方法.pdf

    综上所述,解决JSP中Ajax GET请求的中文乱码问题需要从服务器配置、Servlet处理、JSP页面编码和Ajax请求等多个角度综合考虑,并进行相应的调整。通过这些步骤,可以有效地避免并解决中文乱码问题,保证数据传输的...

    IE 浏览器在get请求下中文乱码的问题.zip

    本主题聚焦于一个常见问题——“IE浏览器在GET请求下中文乱码的问题”。这涉及到字符编码、HTTP协议以及浏览器解析网页的方式等多个知识点,我们将详细探讨这些问题及其解决方案。 首先,我们需要理解GET请求。在...

    过滤器实现get请求乱码问题

    在Java Web开发中,我们经常会遇到GET请求参数乱码的问题,尤其是在处理包含中文字符的URL时。这个问题可以通过使用Servlet Filter来解决。过滤器(Filter)是Java Servlet API的一部分,允许我们在请求到达目标...

    解决post get 请求乱码问题

    解决 POST GET 请求乱码问题 在 Web 开发中,POST 和 GET 请求可能会出现乱码...解决 POST 和 GET 请求乱码问题需要对服务器和应用程序进行配置和编码处理。在实际开发中,我们需要根据具体情况选择合适的解决方法。

    C++Http上传文件到web服务器,解决中文参数乱码

    当涉及到非ASCII字符,如中文,不正确的编码处理会导致乱码。微软提供的CHttpConnect类在处理这种场景时可能存在不足,因此我们需要理解如何正确地编码和传递中文参数。 首先,让我们了解HTTP请求的基本结构。一个...

    java后台发起http请求 处理中文乱码

    ### Java后台发起HTTP请求处理中文乱码 ...综上所述,通过合理设置编码以及正确处理请求和响应参数,可以在Java后台发起HTTP请求时有效解决中文乱码问题。这对于提高系统的稳定性和用户体验至关重要。

    SpringMVC解决GET请求时中文乱码的问题.rar

    在Spring MVC框架中,处理HTTP GET请求时遇到中文乱码问题是一个常见的开发难题。这个问题主要源于请求参数在URL中编码时使用的是UTF-8以外的字符集,导致服务器接收到的参数解码后出现乱码。本文将深入探讨这个问题...

    利用Filter全局中文过滤(get和post请求中文乱码问题)

    filter是javaWeb中一个十分重要的知识点,可以拦截webApp的所有请求。 使用场景: 1、可以利用filter做到网站自登录。...2、可以利用filter全局修改参数编码,从而解决中文乱码问题(十分重要)。

    03.SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢.zip

    在Spring MVC框架中,处理POST和GET请求时可能会遇到中文乱码的问题,这通常是由于字符编码设置不正确导致的。本文将详细阐述如何解决这些问题。 首先,我们需要理解HTTP请求中的编码原理。HTTP协议本身并不规定...

    Android客户端发送请求中文乱码问题完美解决

    Android客户端发送请求中文乱码问题是指在Android客户端向服务器端提交请求时出现的中文乱码问题,这是由于在HTTP请求中,中文字符被编码为乱码字符所致。为了解决这个问题,我们可以从两个方面入手:客户端编码和...

    doget和dopost中文乱码问题1

    DOGET和DOPOST中文乱码问题解决方案 DOGET和DOPOST是常用的HTTP请求方法,分别对应GET和POST请求。在Web开发中,中文字符的乱码问题是一个常见的问题,特别是在使用DOGET和DOPOST请求时。今天,我们将讨论DOGET和...

    Delphi10中idHttpServer接收中文参数乱码的处理

    但在接收浏览器发送的带中文URL时,取参数就会是乱码。经过查找资源,发现大部分浏览器,中文一般会先转码为utf-8,此时,idHttpServer控件会根据请求头中ContentType的Chatset进行相应的转码,以形成正确的参数。但...

Global site tag (gtag.js) - Google Analytics