作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个文件上传控件,我可以在其中上传 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/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!