Velocity #parse utf-8 多一行空格 解析错误 出现一个奇怪字符
原因是使用了UTF-8 BOM
方案1:http://blog.sina.com.cn/s/blog_415bd7070100blbe.html(好用!注意所有.vm文件都要改成无BOM)
也就是http://www.missyuan.net/article/20080711/html_35163.html
方案2:http://blog.csdn.net/kvgnt/article/details/7065657
-------------------------------------------
下面是方案1的文章
问题描述:
产生这个问题通常是在用UTF-8编码进行开发。
·IE里面会发现页面里多了一行空白,而且排除是CSS的原因。
·firefox的firebug插件里看DOM树,会发现HTML多了一行空白,但是在页面样式里面没有影响。
·把页面代码放在UltraEdit下面的十六进制下面看,会发现在空白产生的地方,会有一个“锘?”字符,而本来的"<"符号没了。
要是单个页面的话,就出现在该页面的第一个字符位置。
要是出现在你包含文件的话,那就在该包含文件的第一个字符位置。
----------
说明:
这就是utf-8的签名导致的问题。
UTF-8签名(UTF-8 signature)也叫做BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记。如果多个文件设置了签名,在二进制流中就会包含多个UTF-8签名,而IE是无法识别多个 UTF-8签名的,所以用一个空行来代替,在某些程序处理中还会出现一个类似“锘?”的字符。
W3C官方的说明: http://www.w3.org/International/questions/qa-utf8-bom
解决办法:
用UltraEdit在十六进制模式下,复制另外的"<"去覆盖掉这个头部的"锘?"
并且去掉编辑器里面的BOM签名,以免再次出现。
UTF-8签名也叫做BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准。但是,UTF-8文件不一定都有BOM,这个签名似乎是可有可无的。
这个看起来与动态网页开发不着边际的BOM实际上会带来很大的麻烦。动态网页开发中经常会遇到一个文件中包含其他文件的情况,比如ASP里面的include、PHP里面的require。
当一个有BOM的文件包含了一个或多个有BOM的文件,那这个文件执行后得到的HTML页面可能会出错。原因是多个BOM导致浏览器解释出错。因此,在ASP或PHP环境下开发时,最好所有文件都不加BOM。
然而,ASP.NET下的情况恰好相反。.NET似乎有处理BOM的过程,无论包含了多少有BOM的文件都没问题。反倒是如果这些文件没有BOM,浏览器显示就会出错。对于utf-8的*.aspx.cs,甚至没有BOM会导致编译出错。