首页 文章

URI中的特殊字符

提问于
浏览
1

我有一个zip文件,我正在尝试阅读其内容,在我需要读取名为 [Content_Types].xml 的文件之前,该文件一直很顺利 . 当我尝试创建一个新的URI时,它会尝试将括号转换为友好的url,这会导致文件名不匹配 .

我正在使用 System.IO.Packaging.Package 来读取zip,这在尝试使用 package.GetPart() 读取部分包时需要URI .

如何创建一个URI,保留括号,以便从包中读取文件?

为了澄清我在这里要做的事情,Office Open XML文件(.docx,.xlsx,.pptx等)实际上是具有不同扩展名的zip文件 . 如果将其中一个扩展名的文件重命名为.zip,则可以看到Office文件结构的内容 . 每个Office Open XML文件的根目录中包含的文件之一是 [Content_Types].xml 我需要修改该特定文件 .

2 回答

  • 1

    那是不可能的 .

    根据RFC 2396[] 等字符属于"unwise"类别,因为已知网关和其他传输代理可以修改它们 .

    无论如何,RFC 3986在这个问题上更加明确:

    由Internet协议文字地址(版本6 [RFC3513]或更高版本)标识的主机通过将IP文本括在方括号(“[”和“]”)中来区分 . 这是URI语法中唯一允许使用方括号字符的位置 .

    因此,您可以使用方括号的唯一方法是,您依赖的代码是否无法满足RFC规范 .

    我可能会尝试使用 package.GetParts() 方法迭代各部分并输出它们的URI . 看看你的特殊文件会返回什么会很有趣 .

  • 0

    有一个重载的URI构造函数接受一个布尔dontEscape,它应该阻止括号被转义 . Similar question

    基于重新阅读更新的问题进行编辑:所以从一些谷歌搜索,它看起来像[Content_Types] .xml是一个将zip文件转换为"zip package"的文件 . 巧合的是, System.IO.Packaging.Package 仅适用于zip包(不是常规的zip文件) . 它也只编写zip包(总是包含[Content_Types] .xml) . 我不认为你可以通过设计直接在[Content_Types] .xml到 System.IO.Packaging.Package .

相关问题