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

Ale*_*lla 3 .net c# encoding

如何解码包含拉丁字母的 XML 文档的 Base64 编码字符串(\xc3\xa1,\xc3\xa9,\xc3\xad,\xc3\xb3,\xc3\xba)

\n\n

我知道这个问题How do I Encode and Decode a Base64 string? \n但是提供的解决方案不适用于带有重音符号的字母。

\n\n

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

\n\n
xmlBase64 = System.Text.Encoding.ASCII.GetString(System.Convert.FromBase64String(XmlDoc));\nxmlBase64 = System.Text.Encoding.Unicode.GetString(System.Convert.FromBase64String(XmlDoc));\nxmlBase64 = System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(XmlDoc));\nxmlBase64 = System.Text.Encoding.UTF32.GetString(System.Convert.FromBase64String(XmlDoc));\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

编辑:

\n\n

这是base64编码的字符串

\n\n

这是解码后的字符串

\n

DPe*_*er1 5

查看 生成的字节很有帮助System.Convert.FromBase64String(XmlDoc)

\n\n

我已经这样做了,并查看了原始字符串中的单词“met\xc3\xa1licas”(这只是我找到的第一个带重音的单词)。字符串的这一部分被转换为字节数组6D 65 74 E1 6C 69 63 61 73

\n\n

从该字节数组很容易看出两件事:

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

从那里我猜测这将是某种形式的扩展 ASCII,Windows-1252似乎可以工作。请尝试以下操作:

\n\n
xmlBase64 = System.Text.Encoding.GetEncoding(1252).GetString(System.Convert.FromBase64String(XmlDoc));\n
Run Code Online (Sandbox Code Playgroud)\n