我正在使用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)
}
}
结果:
我按预期在测试file.zip
下获得了一个名为/tmp
的zip文件
在unzip
之后,我收到两个文件:test.txt
,ц╡ЛшпХ.txt
,这就是一团糟。
两个文件中的内容都按预期正常。
为什么会发生这种情况以及如何解决这个问题?
答案 0 :(得分:2)
这可能是issue with unzip
无法正确处理UTF8名称。明确使用中文语言环境对我有用:
$ LANG=zh_ZH unzip 测试file.zip
Archive: 测试file.zip
inflating: 测试.txt
inflating: test.txt
$ cat *.txt
test content: testtest content: 测试
答案 1 :(得分:0)
import {
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
}
filename, _, err = transform.String(simplifiedchinese.GBK.NewEncoder(), "测试.txt")