如何解码包含XML文档的base64编码字符串,该文档包含C#中带重音符号(á,é,í,ó,ú)的字符?

时间:2017-07-27 19:37:56

标签: c# .net encoding

如何解码包含包含拉丁字母(á,é,í,ó,ú)的XML文档的base64编码字符串?

我知道这个问题How do I encode and decode a base64 string? 但是所提供的解决方案对于带有重音的字母效果不佳。

到目前为止,我已经尝试过:

xmlBase64 = System.Text.Encoding.ASCII.GetString(System.Convert.FromBase64String(XmlDoc));
xmlBase64 = System.Text.Encoding.Unicode.GetString(System.Convert.FromBase64String(XmlDoc));
xmlBase64 = System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(XmlDoc));
xmlBase64 = System.Text.Encoding.UTF32.GetString(System.Convert.FromBase64String(XmlDoc));

但在所有情况下,拉丁字母(西班牙字母)都会被?或类似物替换。

编辑:

这是base64 encoded string

这是Decoded string

1 个答案:

答案 0 :(得分:2)

查看System.Convert.FromBase64String(XmlDoc)生成的字节非常有用。

我已经这样做了,看看原始字符串中的“metálicas”这个词(这只是我发现的第一个带有重音的词)。字符串的这一部分将转换为字节数组6D 65 74 E1 6C 69 63 61 73

从该字节数组中可以很容易地看到两件事:

  • 这是单字节编码
  • 不是UTF-8:在UTF-8中,大于7F的字节永远不会自己出现,总是以2-4为一组。

从那里我猜测它将是某种形式的扩展ASCII,Windows-1252似乎有效。请尝试以下方法:

xmlBase64 = System.Text.Encoding.GetEncoding(1252).GetString(System.Convert.FromBase64String(XmlDoc));