読者です 読者をやめる 読者になる 読者になる

メモ:Rのunzipで、Windowsでつくったzipファイルを解凍すると日本語ファイル名が文字化けする

R unzip

なんか奥深そうなんですけど、いい解決方法ないでしょうか。。

tmp_dir <- tempdir()
zip_file <- file.path(tmp_dir, "24kuikishape.zip")
zip_dir  <- file.path(tmp_dir, "24kuikishape")

download.file("http://www.city.osaka.lg.jp/contents/wdu090/opendata/mapinfo/24kuikishape.zip",
              destfile = zip_file)
#> trying URL 'http://www.city.osaka.lg.jp/contents/wdu090/opendata/mapinfo/24kuikishape.zip'
#> Content type 'application/zip' length 166803 bytes (162 KB)
#> ==================================================
#> downloaded 162 KB

unzip(zip_file, exdir = zip_dir)
list.files(zip_dir)
#> [1] "24\x8b\xe6\x89摜.dbf"     "24\x8b\xe6\x89摜.prj"     "24\x8b\xe6\x89摜.sbn"     "24\x8b\xe6\x89摜.sbx"    
#> [5] "24\x8b\xe6\x89摜.shp"     "24\x8b\xe6\x89摜.shp.xml" "24\x8b\xe6\x89摜.shx"      

探してみると、ロケールが違うのが問題らしいです。

qiita.com

totech.hateblo.jp

手元でRを動かしてるのはUbuntuなので、unzip -Ocp932にすれば正しい文字になります。が、どうやらそれをRの中から呼ぶ方法はなさそうです。

R: Extract or List Zip Archives

system()関数を使ったら当然いけるんですけど、それは負けな気がして。うーん。。

system(sprintf('unzip -Ocp932 %s -d %s', zip_file, zip_dir))
#> Archive:  /tmp/RtmpuCvnWN/24kuikishape.zip
#>   inflating: /tmp/RtmpuCvnWN/24kuikishape/24区画像.dbf  
#>   inflating: /tmp/RtmpuCvnWN/24kuikishape/24区画像.prj  
#>   inflating: /tmp/RtmpuCvnWN/24kuikishape/24区画像.sbn  
#>   inflating: /tmp/RtmpuCvnWN/24kuikishape/24区画像.sbx  
#>   inflating: /tmp/RtmpuCvnWN/24kuikishape/24区画像.shp  
#>   inflating: /tmp/RtmpuCvnWN/24kuikishape/24区画像.shp.xml  
#>   inflating: /tmp/RtmpuCvnWN/24kuikishape/24区画像.shx  
list.files(zip_dir)
#> [1] "24区画像.dbf"     "24区画像.prj"     "24区画像.sbn"     "24区画像.sbx"     "24区画像.shp"     "24区画像.shp.xml"
#> [7] "24区画像.shx"