mike-neckのブログ

Java or Groovy or Swift or Golang

Windows 用に圧縮された zip ファイルの中身のファイル名一覧を Golang で取得する

Windows 用に圧縮された zip ファイルを解凍しなければいけなくなったのだけど、mac で unzip するとファイル名が ShiftJIS で解凍できずに困ったので調べた。

f:id:mike_neck:20191029232756p:plain

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文字コード変換すればよいだけだった。