浏览器会如何对表单中的数据进行编码?
当表单采用 post 方式提交时,浏览器会按照打开该表单所在的页面的编码来对表单中的数据进行编码。
在 html 文件当中设置字符编码集(即字符编码格式)
<meta http-equiv="content-type" content="text/html;charset=utf-8">
作用 1:
模拟 http 消息头(content-type),让浏览器以 utf-8 的编码格式来打开该页面,也就是浏览器以 utf-8 来解码该页面(要确保 html 文件本身确定是使用 utf-8 保存的)。
作用 2:
确保浏览器按指定的字符编码集来对表单中的数据进行编码。
中文乱码解决方案
步骤 1:html 文件添加消息头 content-type
在 html 文件中,添加 <meta http-equiv="content-type" content="text/html;charset=utf-8">
另外,表单的提交方式必须是 post。
步骤 2:服务端设置解码的编码格式
在服务器端,使用 servlet 读取表单中的请求参数时,写入代码:request.setCharacterEncoding("utf-8")
,这行代码的作用就是设置解码时的编码格式。
步骤 3:设置服务端返回数据的消息头 content-type
如果 servlet 输出中文,要添加代码:response.setContentType("tex t/html;charset=utf-8")
,这行代码的作用:
作用 1:
指定 out.println 输出时所使用的编码格式。
作用 2:
生成一个消息头 content-type:text/html;charset=utf-8
告诉浏览器,返回的数据类型是 html,编码是 utf-8。这样,浏览器一定会以指定的编码来显示该页面(即以指定的编码格式来解码页面数据,并且该页面有提交表单数据时,也会以指定的编码格式进行编码)