簡體   English   中英

從Tridion多媒體組件中的XML文件中讀取UTF-8內容 - 模板化C#

[英]Read UTF-8 content from the XML file in Tridion multimedia component - Templating C#

我試圖通過模板(C#)讀取多媒體組件中嵌入的XML文件內容。 XML文件包含少量UTF-8字符。 當我讀取xml內容時,輸出將UTF-8字符轉換為一些亂碼(?符號或矩形框)。 下面是我在C#Templating中使用的代碼片段。

代碼1:

Component xmlMultimediaComponent = (Component)XMLMMSRepositoryObject;
// read xml in multimedia component into a string
UTF8Encoding encoding = new UTF8Encoding();
byte[] binary = xmlMultimediaComponent.BinaryContent.GetByteArray();
string navXmlContent = (binary != null) 
               ? UTF8Encoding.UTF8.GetString(binary, 0, binary.Length) 
                       : string.Empty;           

代碼2:

using (MemoryStream ms = new MemoryStream())
{
  xmlMultimediaComponent.BinaryContent.WriteToStream(ms);
  ms.Seek(0, SeekOrigin.Begin);

  using (var streamReader = new StreamReader(ms, Encoding.UTF8))
  {                      
    string output = streamReader.ReadToEnd();
      ....
  }
}

在上述兩種情況下,輸出都具有垃圾字符(對於UTF-8編碼)。

任何想法如何將相同的UTF-8內容放入Tridion多媒體組件中的XML文件的字符串輸出中。

注意:多媒體組件中的XML文件以UTF-8編碼保存。

提前致謝。

請問為什么要嘗試將Xml文檔加載到字符串中?

嘗試將XML Document加載到理解XML文檔的對象(如XDocumentXmlDocument )中,因為他們將知道如何處理字節順序標記。

XDocument.Load(stream) (.NET 4)的內容。

然后,如果您確實需要該文檔的文本,則可以使用該對象的“OuterXml”字符串屬性。

編輯

閱讀您的代碼,看起來您基本上是在嘗試輸出存儲為二進制文件的XML(或者不符合Tridion模式的xml),這不是我所說的最佳實踐。 無論如何,您可以將模板的輸出設置為XmlDocument,不需要是字符串。 查看package.CreateItem變體。

在進一步調查中,我們注意到多媒體組件中關聯的文件是ASCII編碼的。 所以在讀取內容時一定不能顯式轉換為UTF-8,它應該采用默認編碼(即上例中的ASCII)。

       Component xmlMultimediaComponent = XMLMMSRepositoryObject as Component;               
       byte[] binary = xmlMultimediaComponent.BinaryContent.GetByteArray();
       string navContent = (binary != null) ? Encoding.GetEncoding("ASCII") : string.Empty;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM