Windows 用に圧縮された zip ファイルを解凍しなければいけなくなったのだけど、mac で unzip するとファイル名が ShiftJIS で解凍できずに困ったので調べた。
package main import ( "archive/zip" "bytes" "fmt" "golang.org/x/text/encoding/japanese" "golang.org/x/text/transform" "io/ioutil" "log" ) func main() { zipFile, err := zip.OpenReader("build/test.zip") if err != nil { log.Fatalln("error @open file", err) } defer func() { _ = zipFile.Close() }() for _, file := range zipFile.File { r := transform.NewReader(bytes.NewReader([]byte(file.Name)), japanese.ShiftJIS.NewDecoder()) all, err := ioutil.ReadAll(r) if err != nil { log.Fatalln("error read file name", err) } fmt.Println("file", string(all)) } }
単純に、 zip.File
構造体の Name
を文字コード変換すればよいだけだった。