标签归档:编码

Spring MVC 异常响应编码设置

直接代码说话

IE的“c00ce56e”bug

很简单的一个jQuery AJAX请求文件,IE8下报:

Could not complete the operation due to error c00ce56e.

检查网上都说是编码问题,不过写的不是太明确,因为我们服务器的文件编码都已经是UTF-8
最后找到说明

The problem occurs when setting the charset of a response to a XMLHttpRequest to utf8 instead of UTF-8 or ISO-8859-1 instead of ISO8859_1. IE7 is very strict on naming of the charsets.

“ISO8859_1” is the canonical representation of the Latin-1 character encoding string in the Java language and class libraries. The standard that is defined by the Internet Assigned Numbers Authority, however, is “ISO-8859-1”, which is not an accepted alias.

For more information refer: http://support.microsoft.com/default.aspx?scid=kb;en-us;304625

于是打开nginx的配置文件,把所有“utf8”替换成“UTF-8”,问题解决

有时候注释也不能乱写

让我们看看这个很简单的例子:







尝试分别在各种浏览器下运行它:






在大多数情况下,我们得到了正确的预期中的结果,如下图所示:
大多数浏览器下的执行效果

但是不要忘了神一般的IE6,OMG,发生了什么:
IE6下的运行效果

经过我一个像素一个像素的测量,发现当其中一个div减少3px的时候,在IE6下就能并排显示
这个数值很容易让人想到The IE6 Three Pixel Gap,但也不是这个问题,真正的原因在于那句注释,将注释去掉就能在IE6下也得到正确的结果

有时候嵌套过多时,我们为了方便地找到嵌套的首位,会比较习惯于在开始和结束的地方加上注释,这时候如果碰到float就要慎重了,我测试了将注释换行或者加上空行分隔,都不能解决此问题

再次呼吁抛弃IE6!

另外还有css和js文件的注释,最好写英文注释,当然最好的习惯是将所有文件保存为统一编码
我碰到的几次问题是utf8的html引入编码为ansi的js文件,结果由于字符集的问题导致js中的单行(即//开头的注释)中文注释不能正确断行,导致下一行本应执行的语句被注释掉,由此可以推出一个好的编码习惯,即在单行注释末尾也加分号