为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Go 的 archive/zip 创建带有 Unicode 文件名的 zip 存档

使用 Go 的 archive/zip 创建带有 Unicode 文件名的 zip 存档

Go
慕妹3242003 2021-10-04 15:57:48
package mainimport (    "archive/zip"    "fmt"    "io"    "os"    "path/filepath"    "strings")func main() {    var (        Path = os.Args[1]        Name = os.Args[2]    )    File, _ := os.Create(Name)    PS := strings.Split(Path, "\\")    PathName := strings.Join(PS[:len(PS)-1], "\\")    os.Chdir(PathName)    Path = PS[len(PS)-1]    defer File.Close()    Zip := zip.NewWriter(File)    defer Zip.Close()    walk := func(Path string, info os.FileInfo, err error) error {        if err != nil {            fmt.Println(err)            return err        }        if info.IsDir() {            return nil        }        Src, _ := os.Open(Path)        defer Src.Close()        fmt.Println(Path)        FileName, _ := Zip.Create(Path)        io.Copy(FileName, Src)        Zip.Flush()        return nil    }    if err := filepath.Walk(Path, walk); err != nil {        fmt.Println(err)    }}这个 mydir 路径:-----root    |---2015-05(dir)         |---中文.go    |---package(dir)    |---你好.go当我使用这个代码目录时,中文会出现乱码。谁能帮我解决问题。
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

package main


import (

    "archive/zip"

    "fmt"

    "io"

    "os"

    "path/filepath"

    "strings"

)


func main() {

    var (

        Path = os.Args[1]

        Name = os.Args[2]

    )


    File, _ := os.Create(Name)

    PS := strings.Split(Path, "\\")

    PathName := strings.Join(PS[:len(PS)-1], "\\")

    os.Chdir(PathName)

    Path = PS[len(PS)-1]

    defer File.Close()

    Zip := zip.NewWriter(File)

    defer Zip.Close()

    walk := func(Path string, info os.FileInfo, err error) error {

        if err != nil {

            fmt.Println(err)

            return err

        }

        if info.IsDir() {

            return nil

        }

        Src, _ := os.Open(Path)

        defer Src.Close()

        //FileName, _ := Zip.Create(Path)

        h := &zip.FileHeader{Name: Path, Method: zip.Deflate, Flags: 0x800}

        FileName, _ := Zip.CreateHeader(h)

        io.Copy(FileName, Src)

        Zip.Flush()

        return nil

    }

    if err := filepath.Walk(Path, walk); err != nil {

        fmt.Println(err)

    }

}


查看完整回答
反对 回复 2021-10-04
  • 2 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信