解决Xaml中包含中文导致无法编译的问题
最近同事在编译工程的时候发现一个奇怪的Xml验证错误,提示信息是The "ValidateXaml" task failed unexpectedly。检查了半天发现是Generic.xaml文件中的中文字符导致的。只要文件中包含中文,那么就会出现这个编译错误。即使注释掉也依然出错。
这就奇怪了,按说Xaml中是可以直接写中文的。想了一下,这个情况和我之前遇到的脚本字符集的问题类似(参考:文档字符集导致的脚本错误)。我查看了一下这个Generic.xaml文件本身的编码,发现是GB2312,重新存成UTF-8之后,成功编译,问题解决。
问题的原因就在于,文件本身使用的编码和它声明的编码不一致。xml解析器(也就是silverlight的xaml解析器)在对字节流(该字节流之前是使用gb2312进行编码的)进行解码时,用的就是声明的编码(如果没有指定,则默认为utf-8),因此这种不一致的问题会导致解码之后得到一些意想不到的字符,导致silverlight的xaml解析器无法识别,从而抛出上述的异常。例如一个本应该解析成闭合符>的,结果被解析成其他字符。
知道这个原因之后我们要做的就是,保证文件存储的编码格式和它声明的编码格式一致即可。
A方案:将文件另存为UTF-8编码格式。
B方案:显式指定Xaml文件的字符集声明。由于Xaml也是xml,因此我们可以在文件中加上xml声明头,如下:
<?xml version="1.0" encoding="gb2312" ?> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <!--测试--> </ResourceDictionary>
不过建议使用A方案,这样兼容性更好一些。
你可能对下面的文章感兴趣
本博客遵循CC协议2.5,即署名-非商业性使用-相同方式共享
写作很辛苦,转载请注明作者以及原文链接~
如果你喜欢我的文章,你可以订阅我的博客:-D点击订阅我的文章










最新评论
方便提供你自己的博客地址吗?你的博客是刚刚创建的吗?还是已经 创建一段时间了?
你好,按照上面的步骤完成后,搜索时空白,google.sea rch.CustomSearchControl里的id换成你 的博客的id,可以搜到,但我自己咋igoogle申请的...
你好,按照上面的步骤完成后,搜索时空白,google.sea rch.CustomSearchControl里的id...
虽然不是很懂,但还是得说声楼主辛苦了!
谢楼主分享~