Windows 10
Golang 1.17
-----
zip нормально отображает русские имена, проверял на другом tar архиве
-----
Создаю tar, код ниже, но когда открываю zip-ом то вместо русских символов пустота... Я так понял, что проблема только у меня, но не могу понять, что именно не так. Переустановил Go проблема не решилась...
package main
import (
"archive/tar"
"fmt"
"io"
"log"
"os"
)
func main() {
// Create and add some files to the archive.
f, err := os.Create("test.tar")
if err != nil {
panic(err)
}
tw := tar.NewWriter(f)
var files = []struct {
Name, Body string
}{
{"eng_ридми.тхт", "Этот архив создан для проверки создания таров из файлов с русскими буковками."},
{"гоферRU.txt", "Имена Гофера:\nGeorge\nGeoffrey\nGonzo"},
{"туду.txt", "Добыть лицензию на разведение животных (придурки!)."},
}
for _, file := range files {
hdr := &tar.Header{
Name: file.Name,
Mode: 0600,
Size: int64(len(file.Body)),
}
if err := tw.WriteHeader(hdr); err != nil {
log.Fatal(err)
}
if _, err := tw.Write([]byte(file.Body)); err != nil {
log.Fatal(err)
}
}
if err := tw.Close(); err != nil {
log.Fatal(err)
}
f.Close()
f, err = os.Open("test.tar")
if err != nil {
panic(err)
}
// Open and iterate through the files in the archive.
tr := tar.NewReader(f)
for {
hdr, err := tr.Next()
if err == io.EOF {
break // End of archive
}
if err != nil {
log.Fatal(err)
}
fmt.Printf("Contents of %s:\n", hdr.Name)
if _, err := io.Copy(os.Stdout, tr); err != nil {
log.Fatal(err)
}
fmt.Println()
}
f.Close()
}
Для примера другой tar в zip (русские текст есть)...