中文编码
- 用户发起Http请求时,需要存在编码的地方是URL、Cookie、Parameter。服务端接收到Http请求后,需要解码的地方是URL、Cookie和Post表单。servlet处理完请求后,将需要返回给浏览器的数据再次进行编码,通过socket发送到用户浏览器中,浏览器再通过解码,将服务端返回的数据渲染后呈现给用户。
- URL的解码通过request.getRequestURL()和request.getRequestURI()来完成,默认编码规则为ISO-8859-1。Header的解码通过request.getHeader()来完成,默认编码规则为ISO-8859-1。
常见问题分析
- 字符串在解码时,所用的字符集与编码字符集不一致,会导致汉字变成看不懂的字符。
- 中文字符经过不支持中文的ISO-8859-1编码后,会变成"?",遇到了不在编码范围的字符统一用3f代替,所以都变成了"?"。