在浏览器中打开 XML 时不支持从当前编码切换到指定编码
Switch from current encoding to specified encoding not supported when opening XML in browser
我试图在浏览器中打开一个 xml 文件,但出现以下错误:
不支持从当前编码切换到指定编码。处理资源时出错
现在我通过下面的代码使用 C# 生成这个 XML。我的 XML 有拉丁字符,所以我想编码为 ISO-8859-1 而不是 utf-16。但是每次我的 xml 生成时,它都采用 utf-16 编码而不是 ISO-8859-1。我想知道是什么原因和解决方法。
注意:我只需要 ISO-8859-1 而不是 utf-8 或 utf-16,因为如果编码是 ISO-8859-1,XML 会正确生成。
C#代码:
var doc = new XDocument(new XDeclaration("1.0", "iso-8859-1", "yes"),new XElement("webapp", new XAttribute("name", webApp.Name), new XAttribute("id", webApp.Id), Myinformation());
var wr= new StringWriter();
doc.Save(wr);
return wr.ToString();
至少在概念上,字符串没有编码。它只是一系列 unicode 字符。也就是说,内存中的字符串本质上是 UTF-16,因此 StringWriter
returns 来自它的 Encoding
属性.
你需要的是一个指定编码的编写器你想要:
var doc = new XDocument(new XElement("root"));
byte[] bytes;
var isoEncoding = Encoding.GetEncoding("ISO-8859-1");
var settings = new XmlWriterSettings
{
Indent = true,
Encoding = isoEncoding
};
using (var ms = new MemoryStream())
{
using (var writer = XmlWriter.Create(ms, settings))
{
doc.Save(writer);
}
bytes = ms.ToArray();
}
这将为您提供使用 ISO-8859-1 编码的二进制数据,因此声明将指定该编码。
您可以将其转换回字符串:
var text = isoEncoding.GetString(bytes);
但请注意,这不再以 ISO-8859-1 编码,它又只是一个字符串。您可以很容易地使用其他东西对其进行编码,并且您的声明是不正确的。
如果您确定要将其作为中间字符串,那么我建议您使用 the approach in this answer.
我试图在浏览器中打开一个 xml 文件,但出现以下错误:
不支持从当前编码切换到指定编码。处理资源时出错
现在我通过下面的代码使用 C# 生成这个 XML。我的 XML 有拉丁字符,所以我想编码为 ISO-8859-1 而不是 utf-16。但是每次我的 xml 生成时,它都采用 utf-16 编码而不是 ISO-8859-1。我想知道是什么原因和解决方法。
注意:我只需要 ISO-8859-1 而不是 utf-8 或 utf-16,因为如果编码是 ISO-8859-1,XML 会正确生成。
C#代码:
var doc = new XDocument(new XDeclaration("1.0", "iso-8859-1", "yes"),new XElement("webapp", new XAttribute("name", webApp.Name), new XAttribute("id", webApp.Id), Myinformation());
var wr= new StringWriter();
doc.Save(wr);
return wr.ToString();
至少在概念上,字符串没有编码。它只是一系列 unicode 字符。也就是说,内存中的字符串本质上是 UTF-16,因此 StringWriter
returns 来自它的 Encoding
属性.
你需要的是一个指定编码的编写器你想要:
var doc = new XDocument(new XElement("root"));
byte[] bytes;
var isoEncoding = Encoding.GetEncoding("ISO-8859-1");
var settings = new XmlWriterSettings
{
Indent = true,
Encoding = isoEncoding
};
using (var ms = new MemoryStream())
{
using (var writer = XmlWriter.Create(ms, settings))
{
doc.Save(writer);
}
bytes = ms.ToArray();
}
这将为您提供使用 ISO-8859-1 编码的二进制数据,因此声明将指定该编码。
您可以将其转换回字符串:
var text = isoEncoding.GetString(bytes);
但请注意,这不再以 ISO-8859-1 编码,它又只是一个字符串。您可以很容易地使用其他东西对其进行编码,并且您的声明是不正确的。
如果您确定要将其作为中间字符串,那么我建议您使用 the approach in this answer.