URI中的特殊字符

时间:2012-12-27 21:09:46

标签: c# zip uri

我有一个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 个答案:

答案 0 :(得分:1)

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

根据重新阅读更新的问题进行编辑: 因此,通过一些谷歌搜索,它看起来像[Content_Types] .xml是一个将zip文件变成“zip包”的文件。巧合的是,System.IO.Packaging.Package仅适用于zip包(不是常规的zip文件)。它也只编写zip包(总是包含[Content_Types] .xml)。我不认为您可以通过System.IO.Packaging.Package直接通过[Content_Types] .xml进行设计。

答案 1 :(得分:0)

那是不可能的。

根据RFC 2396[]等字符属于“不明智”类别,因为已知网关和其他传输代理会对其进行修改。

无论如何,RFC 3986在这个主题上更明确一些:

  

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

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

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