なんか奥深そうなんですけど、いい解決方法ないでしょうか。。
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"
探してみると、ロケールが違うのが問題らしいです。
手元で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"