从Tridion多媒体组件中的XML文件读取UTF-8内容-模板化C
我试图通过templatingC读取嵌入在多媒体组件中的XML文件内容。XML文件包含很少的UTF-8字符。当我读取xml内容时,输出是将UTF-8字符转换成一些垃圾字符?符号或矩形框。 下面是我在C模板中使用的代码片段 代码1:从Tridion多媒体组件中的XML文件读取UTF-8内容-模板化C,tridion,tridion-2011,Tridion,Tridion 2011,我试图通过templatingC读取嵌入在多媒体组件中的XML文件内容。XML文件包含很少的UTF-8字符。当我读取xml内容时,输出是将UTF-8字符转换成一些垃圾字符?符号或矩形框。 下面是我在C模板中使用的代码片段 代码1: Component xmlMultimediaComponent = (Component)XMLMMSRepositoryObject; // read xml in multimedia component into a string UTF8Encoding e
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编码的垃圾字符
您知道如何在Tridion多媒体组件中从XML文件的字符串输出中获得相同的UTF-8内容吗
注意:多媒体组件中的XML文件使用UTF-8编码保存
提前谢谢。我可以问一下,为什么要将Xml文档加载到字符串中 尝试将XML文档加载到能够理解XML文档(如XDocument或XmlDocument)的对象中,因为它们知道如何处理字节顺序标记 与XDocument.Loadstream.NET4类似的东西 然后,如果确实需要该文档的文本,可以使用该对象的OuterXml字符串属性 编辑
通读您的代码,看起来您基本上是在试图输出存储为二进制的XML或不符合Tridion模式的XML,这不是我所说的最佳实践。无论如何,您可以将模板的输出设置为XmlDocument,而不需要是字符串。查看package.CreateItem变体。我可以问一下,为什么要将Xml文档加载到字符串中 尝试将XML文档加载到能够理解XML文档(如XDocument或XmlDocument)的对象中,因为它们知道如何处理字节顺序标记 与XDocument.Loadstream.NET4类似的东西 然后,如果确实需要该文档的文本,可以使用该对象的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;
在进一步调查中,我们注意到多媒体组件中关联的文件是ASCII编码的。因此,在读取其内容时,不能显式转换为UTF-8,并且应该使用默认编码,即在上述情况下使用ASCII
Component xmlMultimediaComponent = XMLMMSRepositoryObject as Component;
byte[] binary = xmlMultimediaComponent.BinaryContent.GetByteArray();
string navContent = (binary != null) ? Encoding.GetEncoding("ASCII") : string.Empty;
也许可以将您的UTF8示例内容粘贴到这里,这样我们就可以在旁注上用iTunes进行测试—许多人认为使用不包含二进制文件(如文本、xml等)的MMC是一种不好的做法。如果需要在Tridion中存储XML,那么可以使用具有非RTF多值文本字段的组件。也许可以将您的UTF8示例内容粘贴到这里,这样我们就可以在旁注上用iTunes进行测试—许多人认为使用不包含二进制文件(如文本、xml等)的MMC是一种不好的做法。如果需要在Tridion中存储XML,那么可以使用具有非RTF多值文本字段的组件。是的,而不是显式编码;在上述情况下,您需要在目标类型设置级别将输出包保持为utf-8;在上述情况下,您需要将输出包保持为目标类型设置级别的utf-8。