c# - 在 XmlReader .NET 4.0 中加载失败目录文件
问题描述
这个文件名的字符是 (0xE700)。
当我在 XmlReader 中阅读时,我无法阅读它,因为文件名加载更改字符是 %EE%9C%80
XmlReader reader = XmlReader.Create(fileName, settings);
为什么 (0xE700) => %EE%9C%80!
解决方案
它发生是因为XmlReader.Create
将第一个参数视为 Uri。这并不明显,但您可以从方法签名中获取
XmlReader Create(string inputUri, XmlReaderSettings settings, XmlParserContext inputContext);
0xE700 是一个特殊字符,不能在 Uri 中使用,转义为%EE%9C%80!
FileStream
但是,您可以使用例如更改代码并读取文件内容
var fileName = string.Format("{0}test.xml", char.ConvertFromUtf32(0xE700));
File.WriteAllText(fileName, "<root><node /></root>");
using (var fileStream = new FileStream(fileName, FileMode.Open))
{
using (var reader = XmlReader.Create(fileStream))
reader.ReadStartElement();
}
new FileStream(fileName, FileMode.Open)
将按名称读取文件,并且不会对文件名进行编码(如 XmlReader.Create 所做的那样)。
推荐阅读
- javascript - 如何在 Google Chrome 扩展程序中创建自定义 404 错误页面?
- math - 严格静止但非弱静止(非独立同分布情况)
- python - 使用pickle从python中提取面部特征后更新数据集
- sql - sql左连接在同一张表上
- image - SixLabors:将 img 颜色空间转换为 sRGB
- java - Java对方法返回值的拆箱
- scala - gradle 将多模块项目发布到 AWS Artifact 仅发布 META-INF
- delphi - 通用 TObjectlist 操作 Delete 和 Move 对后代来说是类型安全的吗?
- python - 使用 Win32clipboard.GetClipboardData 获取复制的 excel 表在多行后返回汉字?
- azure - 微软云,如何对 API 进行身份验证