Tengo un problema con el siguiente código:XamlReader.Parse lanza el "carácter no válido en la codificación dada"
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;
}
El xaml correspondiente, en la que aparece un problema:
...
<TextBlock>русская надпись</TextBlock>
<TextBlock Text="קח מספר" />
...
durante el análisis de este xaml consigo la excepción:
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()
archivo XAML guardado como UTF-8
¿Alguien sabe cómo puedo cargar este xaml sin tales problemas? ¡Gracias de antemano!
PD: Bien, he encontrado el origen del problema.
La forma correcta de cargar xaml es usar el método XamlReader.Load en lugar del XamlReader.Parse. En mi caso parece como:
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;
}
¡Gracias a todos!
¿Estás seguro de que se codificación UTF-8? –
Sí, he intentado guardar este archivo como utf-8 con BOM, y sin él también. En ambos casos, obtuve el mismo resultado. – basilkot
Y cuando muestro la secuencia de lectura a través del visualizador VS, no tiene ningún problema. Todos los personajes son correctos. – basilkot