0

我使用 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。

4

1 回答 1

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
于 2013-11-18T07:52:25.733 回答