.net - XamlReader.Parse 抛出 "Invalid character in the given encoding"

标签 .net wpf xaml

我的以下代码有问题:

using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
    var content = reader.ReadToEnd();
    ParserContext context = new ParserContext()
    {
        BaseUri = new Uri(Configuration.SkinsFolder)
        //,XmlLang = "utf-8" // I have tried with this parameter and without it
    };
    var result = XamlReader.Parse(content, context);
    return result;
}

对应的xaml,出现问题的地方:

...
<TextBlock>русская надпись</TextBlock>
<TextBlock Text="קח מספר" />
...

在解析此 xaml 期间,我遇到异常:

Invalid character in the given encoding. Line 76, position 167.
   at System.Windows.Markup.XamlReaderHelper.RethrowAsParseException(String keyString, Int32 lineNumber, Int32 linePosition, Exception innerException)
   at System.Windows.Markup.XamlReaderHelper.Read(XamlNode& xamlNode)
   at System.Windows.Markup.XamlParser.ReadXaml(Boolean singleRecordMode)
   at System.Windows.Markup.XamlParser._Parse()
   at System.Windows.Markup.XamlParser.Parse()

Xaml 文件保存为 utf-8

有人知道我如何加载这个xaml而不出现这样的问题吗? 提前致谢!

PS:好的,我已经找到问题的根源了。

加载xaml的正确方法是使用XamlReader.Load方法而不是XamlReader.Parse。就我而言,它似乎是:

using (Stream stream = new FileStream(source, FileMode.Open))
{
    ParserContext context = new ParserContext()
    {
        BaseUri = new Uri(Configuration.SkinsFolder)
    };
    var result = XamlReader.Load(stream, context);
    return result;
}

谢谢大家!

最佳答案

我在使用德语元音变音字符时也遇到了同样的问题。我认为 .NET Framework 中存在错误。尝试使用此函数而不是 XamlReader.Parse(content, context):

public static object Parse(string xamlText, ParserContext parserContext)
{
  return System.Windows.Markup.XamlReader.Load((Stream) new MemoryStream(Encoding.UTF8.GetBytes(xamlText)), parserContext);
}

关于.net - XamlReader.Parse 抛出 "Invalid character in the given encoding",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5841647/

相关文章:

wpf - 关闭子窗口最小化父窗口

c# - WPF C# 列表框外部滚动按钮

c# - 为扫雷游戏动态创建一个游戏板

c# - app.config 中的 maxReceivedMessageSize 和 maxBufferSize

c# - 如何修复 ASP.NET 中的 "System.IO.IOException: Unable to read data from the transport connection: The connection was closed"?

.net - VB.NET - WinForms - 防止用户控件的资源被复制到窗体的本地资源中

c# - 如何通过设置窗口实时控制程序的不透明度?

c# - 来自程序集的 WPF 自定义 FontFamily?

c# - 标签上的 Caliburn Micro 运行代码点击

c# - 在通过网关发送的 SMS 消息中编码 £ 无法正常工作