在C#中从Base64解码

时间:2011-09-09 22:33:00

标签: c# xml encoding base64

我创建了XML Document并将此文档保存为

  XmlDocument xmlDoc = new XmlDocument();
  XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
  xmlDoc.AppendChild(dec);
  XmlTextWriter writer = new XmlTextWriter(fullPath,Encoding.UTF8);
  writer.Formatting = Formatting.Indented;
  xMLDoc.Save(writer);
  writer.Flush();

然后我使用Base64编码器编码了这个文档

解码器无法解析XML文件。 我自己创建了解码器并得到了这个结果

 ?<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ClinicalDocument 
 xmlns=\"urn:hl7-org:v3\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
classCode=\"DOCCLIN\" moodCode=\"EVN\" schemaLocation=\"urn:hl7-org:v3
CDA.xsd\">\r\n  <typeId extension=\"POCD_HD000040\" root=\"2.16.840.1.113883.1.3
\" />\r\n

请帮我解决这个问题。 我如何保存XML文件以避免问题? 或者我如何编码到Base 64来解决问题? 我使用base64编码器来编码xml文件。 我要求提供文件。它需要使用base64编码器。 我解码自己检查问题在哪里。 解码器是Java。他们无法解析我认为的xml文件?&lt;在文件前面。

2 个答案:

答案 0 :(得分:16)

这取决于你如何编码它,但你应该使用UTF-8,因为文档是这样声明的。以下是编码和解码的示例:

请参阅Jon Skeet的回答:
C# base64 encoding/decoding with serialization of objects issue

编码:

public string EncodeStringToBase64(string stringToEncode)
{
    return Convert.ToBase64String(Encoding.UTF8.GetBytes(stringToEncode));
}

解码:

public string DecodeStringFromBase64(string stringToDecode)
{       
    return Encoding.UTF8.GetString(Convert.FromBase64String(stringToDecode));
}

答案 1 :(得分:1)

另一个选项 - 可能是由新XmlTextWriter(fullPath,Encoding.UTF8)创建的默认Utf-8流中的BOM;

考虑使用UTF8的第二个构造函数 - http://msdn.microsoft.com/en-us/library/s064f8w2.aspx,它不会将BOM插入流中。