解决Xaml中包含中文导致无法编译的问题
最近同事在编译工程的时候发现一个奇怪的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,这样兼容性更好一些。
你可能对下面的文章感兴趣

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



最新评论
这个错误应该是因为Java不支持命名组导致的,将(?.*)语 法改成(.*),然后后向引用的时候使用\1即可。 但是由于java还不支持平衡组,也就是压入弹出堆栈的操...
在Expresso工具上确实可以运行 ;我改成java正则表达式后(?s)<(?<Ht mlTag>[\\w]+)[^>]*\\s...
这得看具体场景,如果你的文件非常大,那么使用正则匹配可能效率 会明显不如自己写一个程序一行一行去统计来得高。但是至少这种方 式不用自己写代码。
支持喽!博客不错!
好办法,不过据说正则表达式性能不高