浏览器端:【第一次编码(utf-8)】->【第二次编码(utf-8)】
到了服务器端,也就是容器端:【容器默认做一次解码(utf-8, gbk, iso-xxxx)】->【服务器端代码做一次 utf-8解码】
注意到编码的时候,第一次utf-8编码之后 得到的已经没有非ascii的其他字符了,都是ascii字符,这样再做一次utf-8编码就是对ascii字符做的utf-8编码。
在服务器端:因为第二次编码的时候是对ascii字符编码,所以解码的时候无论用什么方式(gbk、iso、utf-8)解码,得到的都是ascii码,因为这些编码方式都是兼容ascii编码的!
这样再在代码里做一次utf-8解码,就得到原始的字符了。
你可能会有疑问,两次编码的时候用的都是utf-8,解码的时候不对等为什么能解出来呢?
这里其实是有一个小技巧,就是几乎所有的编码方式都是兼容ascii编码的,所以解码的时候第一次用什么解码都无所谓,因为解码之后依然是ascii码。