Encoding 内容中的DotNetZip和越南语字符

Encoding 内容中的DotNetZip和越南语字符,encoding,dotnetzip,Encoding,Dotnetzip,我已经使用DotNetZip一段时间了,但是遇到了一个问题。我有一些文本(不是文件名,而是实际的文本内容),其中包括非拉丁字符(特别是越南语)。当我使用DotNetZip压缩此内容时,每次解压时,文本都会被乱码(以错误的方式更改) 我尝试了以下编码选项:UTF7、UTF8、Unicode、UTF32和BigEndianUnicode。所有这些都会产生糟糕的结果 这是一个bug还是我的实现出了问题 如果有必要,我使用的是VB.Net 2010、Win7 x64、.Net 3.5和DotNetZip

我已经使用DotNetZip一段时间了,但是遇到了一个问题。我有一些文本(不是文件名,而是实际的文本内容),其中包括非拉丁字符(特别是越南语)。当我使用DotNetZip压缩此内容时,每次解压时,文本都会被乱码(以错误的方式更改)

我尝试了以下编码选项:UTF7、UTF8、Unicode、UTF32和BigEndianUnicode。所有这些都会产生糟糕的结果

这是一个bug还是我的实现出了问题


如果有必要,我使用的是VB.Net 2010、Win7 x64、.Net 3.5和DotNetZip 1.9.1.8。

我找到了自己的答案。我会把它贴在这里,以防将来有人找它

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
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