gpt4 book ai didi

c# - 上传 XML -> 读取 unicode 流并转换

转载 作者:数据小太阳 更新时间:2023-10-29 02:31:53 24 4
gpt4 key购买 nike

我有一个文件上传控件,我可以在其中上传 xml 文档。

XML 文件将以 unicode 格式编码。我想将它们转换为 UTF8,以便它们可以呈现为正确的 xml 文件。

我将上传的文件作为十六进制字符串保存在隐藏字段中,并将其发送到通用处理程序。我想要的是我可以从中创建 xml 的结果。目前我的字符串看起来像这样:

"??<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0\"\01\0.\00\0\"\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0\"\0I\0S\0O\0-

代替

<?xml version="1.0".. etc

代码:

if (fileUpload.PostedFile.ContentType == "text/xml")
{
Stream inputstream = fileUpload.PostedFile.InputStream;

byte[] streamAsBytes = (ConvertStreamToByteArray(inputstream));

string stringToSend = BitConverter.ToString(streamAsBytes);

xmlstream.Value = stringToSend;

sendXML.Visible = true;
infoLabel.Text = "<b>Selected XML: </b>" + fileUpload.PostedFile.FileName;
}

处理程序.ashx:

if (HttpContext.Current.Request.Form["xmldata"] != null)
{
HttpContext.Current.Response.ContentType = "text/xml";
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;

string xmlstring = HttpContext.Current.Request.Form["xmldata"];

byte[] data = xmlstring.Split('-').Select(b => Convert.ToByte(b, 16)).ToArray();

string complete = System.Text.ASCIIEncoding.ASCII.GetString(data);

XmlDocument doc = new XmlDocument();
doc.LoadXml(complete);

HttpContext.Current.Response.Write(doc.InnerXml);
}

谢谢!

最佳答案

目前还不清楚您是否真的应该这样做。 XML 文件可以声明它们自己的编码,看起来你的文件正在声明以“ISO”开头的编码(这是你给我们的数据停止的地方)。这可能不是 UTF-8。

基本上,我认为您不应该将数据视为 handler.ashx 中的文本。只需获取 XmlDocument 即可从流中解析它。您的上传代码如何发送数据并不是很清楚确切地,但您应该尽可能少地弄乱它。

有可能如果您只是更改此代码,您当前的代码实际上可以正常工作:

string complete = System.Text.ASCIIEncoding.ASCII.GetString(data);
XmlDocument doc = new XmlDocument();
doc.LoadXml(complete);

为此:

XmlDocument doc = new XmlDocument();
doc.Load(new MemoryStream(data));

然而,十六进制部分非常难看。如果您确实需要将二进制数据表示为文本,我强烈建议您使用 Base64 而不是十六进制:

string text = Convert.ToBase64String(binary);
...
byte[] binary = Convert.FromBase64String(text);

...不需要单独转换每个字节并在连字符等处拆分字符串。

关于c# - 上传 XML -> 读取 unicode 流并转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com