response.setContentType("text/html; charset=GBK");
Content Type指的是一种被称为MIME的标准所定义的类型。它对浏览器非常重要,因为现代的浏览器可以处理非常丰富的资料类型,比如:HTML、纯文本、各种格式的图片(JPEG、GIF、PNG等)、视频、音频文件等。所有的资料都是同过相同的方式传送给浏览器的。那么浏览器怎么知道服务器传给它的是什么东西呢?答案就是通过Content Type。
response.setContentType("text/html; charset=GBK");
设置输出数据的字符编码。
对于所有的文本类型的响应(text/*),在指定Content Type的同时,还应该指定一个字符集编码,例如:charset=GBK。
这个设置会产生两个效果:
1. 告诉浏览器,用GBK编码来解释该页面中的字符。
2. 告诉应用服务器,在输出页面时,将Unicode字符转换为GBK编码。
对于浏览器页言,即使你不在Content Type中指定charset,有时也是可以接受的。现在的浏览器都很聪明,它会根据一系列的规则来确定当前网页的编码是什么:
1. 如果Content Type没指定,它就会去看HTML中有没有这句话:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GBK">
2. 如果都没找到,就使用系统默认的编码。例如,你安装的是简体中文Windows,那么GBK就是默认的字符集编码。
然而,这个charset参数如果不设,会对应用服务器造成麻烦 —— 因为应用服务器可能会用默认的ISO-8859-1编码来转换Unicode字符,一旦你的页面中包括了该编码范围之外的字符(如中文字),页面上就会出现乱码。这是一种常见的错误。因此,为了确保应用程序具有最好的兼容性,必须正确地设置charset参数。
需要注意的是:charset必须在response.getWriter()方法之前调用!