gpt4 book ai didi

linux - 为什么在 golang、linux 中使用 archive/zip 文件名会变得困惑?

转载 作者:IT王子 更新时间:2023-10-29 01:43:00 31 4
gpt4 key购买 nike

我正在使用 golang 的标准包 archive/zip 将几个文件打包成一个 zipfile。
这是我的测试代码:

package main

import (
"archive/zip"
"log"
"os"
)

func main() {
archive, _ := os.Create("/tmp/测试file.zip")
w := zip.NewWriter(archive)

// Add some files to the archive.
var files = []struct {
Name, Body string
}{
{"测试.txt", "test content: 测试"},
{"test.txt", "test content: test"},
}

for _, file := range files {
f, err := w.Create(file.Name)
if err != nil {
log.Fatal(err)
}

_, err = f.Write([]byte(file.Body))
if err != nil {
log.Fatal(err)
}
}

err := w.Close()
if err != nil {
log.Fatal(err)
}
}

结果:
我按预期在 /tmp 下得到了一个名为 测试文件.zip 的 zip 文件。
解压后,我得到两个文件:test.txtц╡ЛшпХ.txt,那是一团糟。
两个文件中的内容都如预期的那样正常。

为什么会发生这种情况以及如何解决这个问题?

最佳答案

这可能是一个 issue with unzip没有正确处理 UTF8 名称。明确使用中文语言环境对我有用:

$ LANG=zh_ZH unzip 测试file.zip
Archive: 测试file.zip
inflating: 测试.txt
inflating: test.txt
$ cat *.txt
test content: testtest content: 测试

关于linux - 为什么在 golang、linux 中使用 archive/zip 文件名会变得困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26944962/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com