http request 乱码的真相

    xiaoxiao2021-03-26  11

    首先,从浏览器端看下有多少种情况:1.在浏览器的地址栏,或者搜索框里输入地址:http://www.test.com/衣服/search?keyword=T恤2.在一个指定了编码的网页中,提交一个form,如:

    你好

    搜索
    当然还有,各种细分的选项,如get/post,form里是否指定了编码。3. ajax请求里的编码。我们从流程上来看,一个http request要经过哪些东东的处理:1.浏览器/JavaScript2.web server,以tomcat/jetty为例3.filter/servlet ,以Java为例4.web 框架,以spring mvc为例。对于在浏览器的地址栏支持输入的地址,各种浏览器是如何处理的,可以参考这个:http://www.ruanyifeng.com/blog/2010/02/url_encoding.html也可以自己简单的测试,在Linux下执行:nc -l 8080接着在浏览器里直接访问 http://localhost:8080/衣服/search?keyword=T恤,然后在就可以看到nc的输出结果了。当然,浏览器的debug工具也可以很方法地看到编码的结果,不过用nc,就不用自己跑一个web服务器了,非常方便。另外那个keyword=T恤,也是有意选择的,这样可以很方便地看到编码的结果。恤的gbk编码是两个byte,utf-8编码是3个byte,也很容易区别到底是什么编码。简单地总结下对于浏览器地址栏里直接访问:http://www.test.com/衣服/search?keyword=T恤 的编码情况:对于chrome,“衣服”和“T恤”都是utf-8编码;对于IE8,“衣服”和“T恤”都是gbk编码。这里实际上有两个概念,一个是URI的编码,一个是query string(即?后面的字符串)的编码。http request里的Content-Type设置:http request是可以指定request的编码信息的,如:Content-Type: application/x-www-form-urlencoded ; charset=UTF-8但实际上,浏览器都没有这样提供这样的说明……form提交里的编码设置:form可以这样子设置编码:<form accept-charset="UTF-8" enctype="application/x-www-form-urlencoded;charset=UTF-8"但是实际上浏览器却不一定会这么做……比如,把页页编码设置为gbk,再把form编码设置为utf-8。简单测试,IE8仍然把form编码为gbk,chrome虽然编码为utf-8,但却没有在request里指明。。当然,还有一个小技巧可以强行使用某种编码,那就是我们先自己转换好编码,如:<form id="productSearchForm" action="http://127.0.0.1:8080/
    转载请注明原文地址: https://ju.6miu.com/read-600130.html

    最新回复(0)