

ファイル保存のパスの冒頭をstringr::str_cで作成します。

[code]

    DirectoryName <- "D1"
    SavePath <- str_c("data/ディレクトリ/", DirectoryName, sep = "", collapse = NULL)
    
[/code]

このSavePathを用いてreadxl::read_xlsxでエクセルファイルを開こうとするとエラーになります。

[code]

    read_xlsx(str_c(SavePath, "TargetExcel.xlsx", sep = "", collapse = NULL ), sheet = "sheet_name")
    
[/code]

エラーメッセージは

[code]

     エラー: Evaluation error:  zip ファイル 'data/ｺ蟷ｹ繧ｷ繧ｹ繝・Β202001.xlsx' を開くことができません
    
[/code]

です。

これについて、str_cをbase::paste0にするとエクセルを正常に開けます。ファイルパスには日本語を含みます。

str_cで開けず、paste0で開ける理由がおわかりになれば教えてください。


CC BY-SA 4.0
2020-04-21T08:54:03.967
65818
2020-04-25T05:18:47.050
2020-04-21T09:17:35.873
3060
39738
question
r tidyverse
read_xlsxのpathをstr_cで作成するとファイルが存在しないエラーが起こる


質問者です。  
SavePath自体の文字コードがR上ではUTF-8で処理されていて、ここにshift-
jisが混じるとパスが内部で文字化けを起こしてエラーを出しているようでした。  
解決策としてはiconvを使ってutf-8からshift-jisに変換したパスを使う、というものになります。

[code]

    DirectoryName <- "D1"
    SavePath <- str_c("data/ディレクトリ/", DirectoryName, sep = "", collapse = NULL)
    SavePath <- iconv(SavePath, from = "utf-8", to = "cp932")
    
[/code]

として、

[code]

    read_xlsx(
        iconv(
            str_c(SavePath, "TargetExcel.xlsx", sep = "", collapse = NULL ),
            from = "uft-8", to = "cp932")
        ),
        sheet = "sheet_name")
    
[/code]

とすると解決しました。  
おそらくwindows上でRを使っているのが原因だと考えられます。  
最後のsheet_name部分も文字コードが混在すると化けることがありますので、こちらも場合によってはshift-jisに変換しなければなりません。  
paste0はこのあたりを曖昧に解決してくれるが、stringr::str_cは厳格にutf-8を使うようにできていて、このような現象が起きたのだと推察します。

コメント、ありがとうございました。


CC BY-SA 4.0
2020-04-25T05:18:47.050
65946
2020-04-25T05:18:47.050
39738
65818
answer