@imbaMF

Почему tar не сохраняет русские имена файлов, в чем может быть причина?

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()
}


613858963cf5c091683273.png
613858a3859c5972423585.png

Для примера другой tar в zip (русские текст есть)...
61385944115cc327315688.png
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы