首页 > Silverlight > 解决Xaml中包含中文导致无法编译的问题

解决Xaml中包含中文导致无法编译的问题

2009年9月29日

最近同事在编译工程的时候发现一个奇怪的Xml验证错误,提示信息是The "ValidateXaml" task failed unexpectedly。检查了半天发现是Generic.xaml文件中的中文字符导致的。只要在文件中写了中文,那么就会出现这个编译错误。即使注释了也是一样的错误。

这就奇怪了,按理说Xaml中是可以直接写中文的。想了一下,这个情况和我之前遇到的脚本字符集的问题类似(参考:文档字符集导致的脚本错误)。我查看了一下这个Generic.xaml文件的字符集,发现是GB2312,改成UTF-8之后,成功编译,问题解决。

问题的原因就在于,文件本身使用的字符集和它声明的字符集不一致,这样导致解析这个Xaml文件的xml解析器在对字节流(假设该字节流是使用gb2312进行编码的)进行解码(假设xml解析器使用UTF-8字符集对字节流进行解码的)的时候会出现一些意想不到的字符,从而使到Xml解析出错,从而抛出上述的异常。例如一个本应该解析成闭合符>的,结果被解析成其他字符。

知道这个原因之后我们要做的就是,保证文件存储的编码格式和它声明的编码格式一致即可。

如果允许,我们可以直接将文件存储格式改成UTF-8即可。否则,我们需要修改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>

不过建议还是使用标准的UTF-8格式来表示Xml,这样兼容性更好一些。

——Kevin Yang

你可能对下面的文章感兴趣

本博客遵循CC协议2.5,即署名-非商业性使用-相同方式共享
写作很辛苦,转载请注明作者以及原文链接~
如果你喜欢我的文章,你可以订阅我的博客:-D点击订阅我的文章

Kevin Yang Silverlight , , , ,

  1. X﹏X 到现在还没有评论~
  1. 暂时没有trackbacks.