【发布时间】:2016-06-09 02:50:34
【问题描述】:
我有一个编码为 Base64 的 XML 文件,该文件中嵌入了图像。
我的问题是当我尝试解码时:
这是我的代码:
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(?)编码混合在一起——这会很糟糕。您应该使用与要嵌入图像的文件相同的语言环境来编码图像。