我一直在使用DotNetZip但是遇到了问题。我有一些文本(不是文件名,但实际的文本内容),包括非拉丁字符(特别是越南语)。当我使用DotNetZip压缩这些内容时,每次解压缩时,文本都会出现乱码(以不良方式更改)。
Dim strOriginal As String = "Đinh Quỳnh Ngô Nguyễn Phạm Tuấn Vũ Phương Ngọc Châu Trần Thị Ngọc Hồng Hiền Tô"
Using zip As New Ionic.Zip.ZipFile()
zip.AlternateEncoding = System.Text.Encoding.Unicode
zip.AlternateEncodingUsage = Ionic.Zip.ZipOption.Always
zip.AddEntry("data", strOriginal)
zip.Save("test.zip")
End Using
Dim strContents As String
Using zip As New Ionic.Zip.ZipFile("test.zip")
Using ms As New System.IO.MemoryStream()
zip.Entries(0).Extract(ms)
ms.Position = 0
Using sr As New System.IO.StreamReader(ms)
strContents = sr.ReadToEnd
sr.Close()
End Using
ms.Close()
End Using
End Using
If strOriginal = strContents Then
MsgBox("Happy")
Else
MsgBox("Sad")
End If
我尝试过以下编码选项:UTF7,UTF8,Unicode,UTF32和BigEndianUnicode。都会产生不好的结果。
这是一个错误还是以某种方式实现我的实现?
如果重要,我使用的是VB.Net 2010,Win7 x64,.Net 3.5和DotNetZip 1.9.1.8。
答案 0 :(得分:1)
我找到了自己的答案。我将在此发布,以防将来有人在寻找它。
Dim strOriginal As String = "Đinh Quỳnh Ngô Nguyễn Phạm Tuấn Vũ Phương Ngọc Châu Trần Thị Ngọc Hồng Hiền Tô"
Using zip As New Ionic.Zip.ZipFile()
Dim byteArray() As Byte = System.Text.Encoding.Unicode.GetBytes(strOriginal)
zip.AddEntry("data", byteArray)
zip.Save("test.zip")
End Using
Dim strContents As String
Using zip As New Ionic.Zip.ZipFile("test.zip")
Using ms As New System.IO.MemoryStream()
zip.Entries(0).Extract(ms)
ms.Position = 0
Using sr As New System.IO.StreamReader(ms, System.Text.Encoding.Unicode)
strContents = sr.ReadToEnd
sr.Close()
End Using
ms.Close()
End Using
End Using
If strOriginal = strContents Then
MsgBox("Happy")
Else
MsgBox("Sad")
End If