Problema de codificação do banco de dados do menu ASP.NET
-
24-09-2019 - |
Pergunta
Eu tenho um menu onde vinculei os dados:
XmlDataSource xmlData = new XmlDataSource();
xmlData.DataFile = String.Format(@"{0}{1}\Navigation.xml", getXmlPath(), getLanguage());
xmlData.XPath = @"/Items/Item";
TopNavigation.DataSource = xmlData;
TopNavigation.DataBind();
O problema é quando meu XML tem personagens especiais, já que eu uso muitas palavras francesas.
Como alternativa, tentei usar um fluxo e usar a codificação para obter os caracteres especiais, com o seguinte código:
StreamReader strm = new StreamReader(String.Format(@"{0}{1}\Navigation.xml", getXmlPath(), getLanguage()), Encoding.GetEncoding(1254));
XmlDocument xDoc = new XmlDocument();
xDoc.Load(strm);
XmlDataSource xmlData = new XmlDataSource();
xmlData.ID = "TopNav";
xmlData.Data = xDoc.InnerXml;
xmlData.XPath = @"/Items/Item";
TopNavigation.Items.Clear();
TopNavigation.DataSource = xmlData;
TopNavigation.DataBind();
O problema que estou tendo agora é que meus dados não atualizam quando altero o caminho em que o fluxo é lido.
Quando eu pulo pelo código, ele faz, mas não na minha página.
Então, o que é, como faço para que os dados sejam atualizados? Ou (o que é realmente preferido) Como faço para acertar a codificação na primeira peça de código?
A ajuda é altamente apreciada!
EDITAR:
Eu tentei a solução CDATA, no entanto, estou trabalhando com atributos, para que não seja possível especificar um elemento em um atributo, meu XML:
<?xml version="1.0" encoding="utf-8" ?>
<Items Text="">
<Item Text="Actualités>"/>
<Item Text="Matériau">
<Item Text="Arsenal"/>
<Item Text="Vêtements"/>
</Item>
<Item Text="Links"/>
</Items>
Alguma outra idéia?
Solução 2
Eu resolvi meu problema.
Alterei a codificação do meu arquivo XML no bloco de notas ++ para UTF8 em vez de ANSI (padrão) e ele resolveu o problema.
Obrigado pelas respostas de qualquer maneira
Outras dicas
Tente embrulhar as palavras francesas comu003C![CDATA[....]]> marcação
Nesse caso, o XML não analisará seus personagens especiais