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

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

Silverlight ,

最近同事在编译工程的时候发现一个奇怪的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方案,这样兼容性更好一些。

——Kevin Yang

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

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