dongyu3659
2015-05-04 08:49
浏览 41
已采纳

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

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

This mydir path :

-----root
    |---2015-05(dir)
         |---中文.go
    |---package(dir)
    |---你好.go

When I use this code directory, Chinese will be garbled. Who can help me solve the problem.

图片转代码服务由CSDN问答提供 功能建议

 包main 
 
import(
“ archive / zip” 
“ fmt” 
  “ io” 
“ os” 
“路径/文件路径” 
“字符串” 
)
 
func main(){
 var(
路径= os.Args [1] 
名称= os  .Args [2] 
)
 
文件,_:= os.Create(Name)
 PS:= strings.Split(Path,“ \\”)
 PathName:= strings.Join(PS [  :len(PS)-1],“ \\”)
 os.Chdir(PathName)
路径= PS [len(PS)-1] 
延迟File.Close()
邮编:= zip。  NewWriter(File)
延迟Zip.Close()
 walk:= func(路径字符串,info os.FileInfo,err错误)错误{
如果err!= nil {
 fmt.Println(err)
 如果info.IsDir(){
返回nil 
} 
 Src,_:= os.Open(Path)
推迟Src.Close()
 fmt.Println(Path),则返回err 
} 
  
 FileName,_:= Zip.Create(Path)
 io.Copy(FileName,Src)
 Zip.Flush()
返回nil 
} 
如果错误:= filepath.Walk(路径,步行 );  err!= nil {
 fmt.Println(err)
} 
} 
   
 
 

此mydir路径:

  ----- root 
 | --- 2015-05(dir)
 | ---中文.go 
 | --- package(dir)
 | ---你好。  go 
   
 
 

当我使用此代码目录时,中文会出现乱码。 谁可以帮助我解决问题。

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

相关推荐 更多相似问题