当从许多阿拉伯语命名文件中创建一个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'
使用的代码是什么?或者我错过了什么?
答案 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)
的工作。