DotNetZip使用阿拉伯名称压缩文件

时间:2014-12-16 08:25:44

标签: dotnetzip codepages

当从许多阿拉伯语命名文件中创建一个zip文件时,我在DotNetZip的FAQ中提示将代码页更改为以下内容:

                  Using zip As New ZipFile()
                zip.AddDirectoryByName("Files")
                zip.AlternateEncoding = Encoding.UTF8
                zip.AlternateEncodingUsage = Ionic.Zip.ZipOption.Always
                Dim row As Integer
                For row = 0 To ds.Tables("d").Rows.Count - 1

                    fileToDownload = Server.MapPath("~/.../Resources/Attachments/" + ds.Tables("d").Rows(row).Item(1).ToString)
                    zip.AddFile(fileToDownload, "Files")

                Next
                Response.Clear()
                Response.BufferOutput = False
                Dim zipName As String = [String].Format(gvRow.Cells(8).Text.Trim + ".zip")
                Response.ContentType = "application/zip"
                Response.AddHeader("content-disposition", "attachment; filename=" + zipName)
                zip.Save(Response.OutputStream)
                Response.[End]()

            End Using

我使用了几个列出的阿拉伯语编码代码,但大多数都生成'???'而这个名称产生如下名称:'||s-|μ+++ ||||pß.docx'

使用的代码是什么?或者我错过了什么?

2 个答案:

答案 0 :(得分:2)

使用 UTF8 编码并将其作为参数传递给构造函数:

IO.File.Delete("D:/testZip.zip")
Using zip As New Ionic.Zip.ZipFile(Encoding.UTF8)
      zip.AddDirectory("d:/out")
      zip.Save("D:/testZip.zip")
End Using

此代码与我一起使用阿拉伯文件名(Windows 7)。
编辑#1 :您必须使用始终选项而不是 AsNesseary 强制DotNetZip使用指定的编码:

 IO.File.Delete("D:/testZip.zip")
  Using zip As New Ionic.Zip.ZipFile()
            zip.AlternateEncoding = Encoding.UTF8
            zip.AlternateEncodingUsage = Ionic.Zip.ZipOption.Always
            zip.AddDirectory("d:/out")
            zip.Save("D:/testZip.zip")
  End Using

编辑#2 :根据您的评论,我认为您的操作系统不支持阿拉伯语UI,对于Windows 7专业版32位,请转到控制面板 - >地区和语言 - >管理[标签] - >点击“更改系统区域设置”按钮 - >选择“阿拉伯埃及”为例 - >好的 - >确定(需要重新启动计算机),不用担心,Windows 7的语言仍然是英语 编辑#3
正如我在编辑#2中提到的,您的系统必须支持阿拉伯语UI,例如,创建一个名为(ملفجديد)的文件,然后使用WinZip或Winrar将其添加到存档,然后打开生成的存档,如果您可以正确读取文件名,则尝试在代码中使用以下编码之一:

Encoding.Unicode
Encoding.UTF7
Encoding.UTF8
Encoding.UTF32

如果您无法在生成的存档中读取阿拉伯文件名,则必须将系统配置为支持阿拉伯语UI 另外,请对这些行使用以下顺序,放入编码,然后添加文件或文件夹:

zip.AlternateEncoding = Encoding.UTF8
zip.AlternateEncodingUsage = Ionic.Zip.ZipOption.Always
zip.AddDirectoryByName("Files")

答案 1 :(得分:1)

在使用代码页似乎无数次尝试之后,只需替换它:

                zip.AlternateEncoding = Encoding.UTF8

用这个:

                zip.AlternateEncoding = Encoding.GetEncoding(720)

的工作。