【问题标题】:How do I decode a base64 encoded string containing an XML document that contains characters with accents (á,é,í,ó,ú) in C#?如何解码包含 XML 文档的 base64 编码字符串,该文档包含 C# 中带有重音符号 (á,é,í,ó,ú) 的字符?
【发布时间】:2017-07-27 19:37:55
【问题描述】:

如何解码包含 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

【问题讨论】:

  • 编码过程中字母是否丢失?
  • UTF-8 应该足够好了。
  • 用什么编码来编码数据?请注意 - 谷歌拉丁字母和其中的字母
  • @litelite,不,我已经检查了文件,字母在那里。
  • @Adam,我也这么认为,但由于某种原因不起作用。

标签: c# .net encoding


【解决方案1】:

查看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));

【讨论】:

  • 太棒了!!!即解决问题。不太确定如何使用 Windows-1252 进行编码。感谢您的宝贵时间。
猜你喜欢
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多