HTTP协议的编码问题

https://blog.csdn.net/qq_38409944/article/details/80637980

https://blog.csdn.net/a83370892/article/details/82726700?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

ISO-8859-1可以用来做中转站,而gbk不可以 https://blog.csdn.net/qq_38409944/article/details/80637345

http://www.ruanyifeng.com/blog/2010/02/url_encoding.html

请求:

结论1:网址路径的编码,用的是utf-8编码。

结论2:查询字符串的编码,用的是操作系统的默认编码。

以上两个结论都是在浏览器中直接输入网址得到

前面说的是直接输入网址的情况

(即这个时候服务器未给到响应之前(1、html中的<meta http-equiv="Content-Type" content="text/html;charset=xxxx">

 2、response.setContent())

但是更常见的情况是,在已打开的网页上(这个时候服务器已经响应了,可能会设置content-type,1、在html中设置,2、在response.setContent中进行设置),直接用Get或Post方法发出HTTP请求。

--------------------------------------------

在已打开的网页上

根据台湾中兴大学吕瑞麟老师的试验,这时的编码方法由网页的编码决定,也就是由HTML源码中字符集的设定决定()。

  <meta http-equiv="Content-Type" content="text/html;charset=xxxx">

如果上面这一行最后的charset是UTF-8,则URL就以UTF-8编码;如果是GB2312,URL就以GB2312编码。

结论3就是,GET和POST方法的编码,用的是网页的编码。

--------------------------------------------

在Ajax调用中,IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。这就是我们的结论4。

--------------------------------------------

假定前面你都看懂了,那么此时你应该会感到很头痛。因为,实在太混乱了。不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果。如果程序员要把每一种结果都考虑进去,是不是太恐怖了?有没有办法,能够保证客户端只用一种编码方法向服务器发出请求?

回答是有的,就是使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会(因为经过编码后,网址的字符组成就符合规则了,就不会编码了)。

因为Javascript的输出总是一致的,所以就保证了服务器得到的数据是格式统一的。

--------------------------------------------

encodeURI()是Javascript中真正用来对URL编码的函数。

它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。

编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

==========================================

iso可以做中转,所以可以

String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

如果改为gbk,那么偶数个字符是可以作为中转,而奇数个不可作中转  https://blog.csdn.net/qq_38409944/article/details/80637345

猜你喜欢

转载自www.cnblogs.com/sheajin/p/12690380.html
今日推荐