【问题标题】:Decoding Base64 string doesn't translate special chars解码 Base64 字符串不会翻译特殊字符
【发布时间】:2016-06-09 02:50:34
【问题描述】:

我有一个编码为 Base64 的 XML 文件,该文件中嵌入了图像。

我的问题是当我尝试解码时:

String sample is here

这是我的代码:

UTF8 版本: 这个可以解码并加载到 XML 中,但是特殊字符不能正确解码(á,é,í,ó,ú,ñ,Ñ)都被解码为 ?符号。

    public XmlDocument GetXmlDocument(string Base64Text)
    {
        string DeCoded = string.Empty;
        XmlDocument Datos = new XmlDocument();
        byte[] Base64 = Convert.FromBase64String(Base64Text);
        DeCoded = Encoding.UTF8.GetString(Base64);
        Datos.LoadXml(DeCoded); 
        return Datos;
    }

UTF7 版本: 这个可以解码,特殊字符都可以正常解码。如果由于嵌入的图像无法正确解码而无法将 Has 图像加载到 XML 文档。

    public XmlDocument GetXmlDocument(string Base64Text)
    {
        string DeCoded = string.Empty;
        XmlDocument Datos = new XmlDocument();
        byte[] Base64 = Convert.FromBase64String(Base64Text);
        DeCoded = Encoding.UTF7.GetString(Base64);
        Datos.LoadXml(DeCoded); 
        return Datos;
    }

编辑 1: 我编码的 Base64 字符串来自 VFP 应用程序,它是使用它编码的 VFP 语法 STRCONV(lcImage, 6)

In VFP help it says: 

Converts character expressions between single-byte, double-byte, UNICODE, and locale-specific representations.

6的意思是:

6   Converts UNICODE (wide characters) to double-byte characters. 

我正在尝试使用 UTF7 和 UTF8,只是测试一个可以翻译我的字符串。

我只需要我的原始 XML 以及它在 .NET 中的嵌入图像,如果这对于标准函数是不可能的,我该如何捕捉和翻译 ?符号 s 到可读字符?

【问题讨论】:

  • 解码必须与编码完全相反。不太清楚你为什么在 Utf8 和 Utf7 之间猜测......旁注:你可以考虑通过实际提供 minimal reproducible example 而不是一些奇怪的 XML 操作来改进你的问题。
  • @AlexeiLevenkov 是的,我试图将我的函数的两个版本放在同一代码中是我的错误。请查看我的编辑。
  • 不过,如果 XML 文件是 UTF-8 + base64 则需要使用 UTF-8 解码,如果是 UTF-7 + base64 编码,则需要使用 UTF-7 来解码decode 等。重要的是你需要像 Alexei 所说的那样对它进行解码。
  • 看来您可能还将 Windows-1252 编码(来自 Anton 的答案)与来自 STRCONV 的 UTF-16(?)编码混合在一起——这会很糟糕。您应该使用与要嵌入图像的文件相同的语言环境来编码图像。

标签: c# utf-8 decode


【解决方案1】:

来自您的 XML 文档:

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

所以,这行得通:

DeCoded = Encoding.GetEncoding(1252).GetString(Base64);

【讨论】:

  • 啊,很好地抓住了 OneDrive 文件中的 encoding="Windows-1252"。但是,如果我从编辑中正确读取STRCONV(lcImage, 6),则使用不同编码的嵌入图像可能会出现一些问题。
  • @Anton-Gogolev,Tks... 这就是我喜欢 StackOverflow 的原因,因为像你这样的人,不管问题对某些人来说是否显而易见(谁反对这个问题)。像我这样的人来 stackoverflow 寻求帮助。而且总有人愿意提供帮助。
猜你喜欢
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多