0

xsltを使用してxmlログファイルをhtmlとして表示するビューアーに取り組んでいます。私のローカリゼーションを除いて、すべてがうまくいっています。生成された HTML ファイルには、一部の 2 バイト文字があるべき場所に 'ó' があります。何が間違っているのかわかりません。

以下は、簡略化された 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();
         }
     }
 }

OutputHtml のコンテンツには、「ó」ではなく「ó」が含まれます。

編集:

これを HTML 文字列の と タグの間に追加すると、問題が解決しました。

 <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>
4

2 に答える 2

1

new XmlTextWriter(ms, Encoding.ASCII)に変更new XmlTextWriter(ms, Encoding.UTF8)

アップデート:

もう 1 つの考えられる問題は、XML ファイルにencoding="utf-8"宣言があっても、ファイルが実際にはそのエンコーディングで保存されていない可能性があることです。XML ファイルのすべてのエンコーディングが宣言されたエンコーディングと一致することを確認してください。個人的には、代わりに自動的に検出できるように、エンコーディングを宣言することをやめることを好みます。

于 2013-06-20T21:40:48.450 に答える
1

間違ったエンコーディングを使用しているため、これを試してください:

using (XmlTextWriter writer = new XmlTextWriter(ms, Encoding.Unicode))
于 2013-06-20T21:41:10.163 に答える