W3C的css-validator和UTF-8文档的BOM冲突

css-validator是W3C提供的一个工具,用于检查CSS的有效性,是个不错的工具,同样的还有W3C Markup Validation Service,用于检查html、xhtml等文档的格式有效性。

但是在检查一篇文档的时候出现了问题,文档是UTF-8编码,XHTML 1.0 Strict检查已通过,CSS代码采用直接使用“<style type=”text/css”>”写在文档中的方式。在使用css-validator检查的时候出现如下错误:

Target: http://www.fwolf.com/tools/ogame_construction_resource_computer.php Please, validate your XML document first! Line 1 Column 1 Content is not allowed in prolog.

第一行、第一列?这不是xml 1.0的文档声明么?怎么在检查css的时候还用这个?结果一查,可能的原因有两个:

原因一:css-validator架构于Jigsaw——W3C’s Java Server上,而Java或Jsp处理XML文档的时候,无法正确识别UTF-8格式文档的BOM,从而导致错误“Content is not allowed in prolog”。

原因二:在这里看到别人在讨论的,即然XML 1.0的规范BOM是合理存在的,那么相关的XML工具就应该具备识别BOM标记的功能,但css-validator使用的XML Validator是采用ElCel Technology C++ Toolkit编译的,而这个东东可能不能完全识别BOM?

在W3C的bugzilla中也有人提交了这个bug,但似乎讨论也是无疾而终。

由于Windows平台下的一些编辑器,尤其是我使用的Emeditor,在没有BOM的情况下,有时会有些麻烦,所以出于方便维护的目的来讲,我认为BOM还是保留的好。至于css-validator不能识别的问题,就只能期待css-validator进行改进了,目前倒是还可以把css标记粘贴过去进行检查不是?W3C的W3C Markup Validation Service在检查文档,发现文档具有BOM的时候,会出现一个小提示:

Byte-Order Mark found in UTF-8 File. The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.

这说明W3C也在改进各类工具对BOM的支持。

至于说了半天,什么是BOM?请看谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词这篇文章。还有GonDa’s Blog上的Unicode、BOM也提到了一些。

另:css-validator以前都是英文版,现在好像改成了自动识别用户语言的版本了,但是我使用FireFox访问首页居然是乱码--文档是GB2312编码,却错误的被识别成了UTF-8编码。总体感觉易用性比W3C Markup Validation Service差远了,尤其是css-validator的中文版,错误提示有点莫名其妙的,还不知道怎么才能使用英文版界面。

Leave a Reply

Your email address will not be published. Required fields are marked *