[英]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文檔的對象(如XDocument
或XmlDocument
)中,因為他們將知道如何處理字節順序標記。
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.