Я работаю над программой просмотра файлов xml в формате html с помощью xslt. Все идет прекрасным исключением из моей локализации. В результате HTML-файл имеет «Ã³», где должны быть некоторые двухбайтовые символы. Я не могу понять, что я делаю неправильно.XSLT, не кодирующий двухбайтовые символы
Вот аа урезанная XSLT-файл:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
<xsl:output method="html" version="4.0" encoding="utf-8" indent="yes"/>
<xsl:variable name="language" select="nbklog/@language" />
<xsl:variable name="dictionaryName">
dictionary_<xsl:value-of select="$language"/>.xml
</xsl:variable>
<xsl:variable name="dictionary" select="document($dictionaryName)" />
<xsl:template match="/nbklog">
<html>
<body>
<h2>
<xsl:value-of select="$dictionary//String[@Key=$jobType]" />
</h2>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Вот файл словаря XML используется для локализации:
<?xml version="1.0" encoding="utf-8"?>
<Dictionary xml:lang="es-ES">
<String Key="Application">
Applicación
</String>
</Dictionary>
Вот пример файла XML трансформироваться:
<?xml version="1.0" encoding="utf-8"?>
<nbklog id="51b654d4" jobType="backup" language="es-ES" version="1.0">
<deviceName>c:\</deviceName>
....
</nbklog>
Я выполняю преобразование следующим кодом C#:
string theOutputHtml;
using (MemoryStream ms = new MemoryStream()) {
using (XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8)) {
XPathDocument theDocument = new XPathDocument(inXmlFilename);
// Load the style sheet and run the transformation.
XslCompiledTransform theXslTrasform = new XslCompiledTransform();
theXslTrasform.Load(inXsltFilename, XsltSettings.TrustedXslt, null);
theXslTrasform.Transform(theDocument, writer);
ms.Position = 0;
using (StreamReader theReader = new StreamReader(ms)) {
theOutputHtml = theReader.ReadToEnd();
}
}
}
Содержимое theOutputHtml будет иметь «Ã³» вместо «ó».
EDIT:
Добавление этого между тегами и в HTML строку решить мою проблему:
<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>
Другими словами, ответы, которые сказали кодирование было неправильно были правильными, но они определили неправильную кодировку. Проблема заключалась в том, что вы выполняли вывод UTF-8 без настройки вашего HTML-сервера, чтобы обозначить его как таковой, поэтому браузер пытался прочитать данные UTF-8 как ISO 8859-1. –
Это было двухместное мощение с моей стороны. Сначала было предложено ответы (фиксированные секунды после того, как я разместил вопрос), во-вторых, это объяснялось моим редактированием и вашим комментарием. –