QuartoとRの文字コードの違いを解決する(Windows OS)

R4.1まではOSの文字コードがデフォルトで使われる
R
Quarto
公開

2023年2月11日

とある環境でWindowsのR4.1.2を使ってQuartoを実行したら、まずYAMLの中の日本語のファイル名を読んでくれない。

Error in rmarkdown:::abs_path(input) :
  The file '(日本語ファイル名).qmd' does not exist.
Calls: .main -> execute -> setwd -> dirname -> <Anonymous>
Execution halted

おかしいな・・・と思いつつとりあえず半角英字のファイル名にしたら進んだものの、Rのコードを含むファイルがうまく変換されません。 こんなWarningが出ます。

Warning messages:
1: In readLines(con, warn = FALSE) :
  invalid input found on input connection 'intro.qmd'
2: In xfun::read_utf8(input) :
  The file intro.qmd is not encoded in UTF-8. These lines contain invalid UTF-8 characters: 4, 5, 9, 13, 15, 16, ...
3: In readLines(con, warn = FALSE) :
  invalid input found on input connection 'intro.knit.md'
4: In readLines(con, warn = FALSE) :
  invalid input found on input connection './intro.knit.md'
5: In readLines(con, warn = FALSE) :
  invalid input found on input connection 'intro.qmd'

対象のファイルがUTF-8でないと言われてますけど、ちゃんとUTF-8にしています。 ここで考えられるのはWindows OS特有の文字コード設定。通常はShift-JISになっているのですがR4.1.2はそれをデフォルトで使おうとします。

Windowsの設定を変えれば解決なのですが、諸事情で変えられないとしてQuartoの方で解決するにはどうしたらいいでしょうか。 ここで前回の記事が役に立ちます。Quartoから呼び出されるRの設定は実行ディレクトリに.Rprofileを置くことで変更できる!

そこで.RprofileでエンコードをUTF-8に設定しました。

options(encoding = "UTF-8")

すると無事にRのコードを含むファイルがQuartoで変換されました。日本語のファイル名も使えるようになりました。

やったね。諸事情で古いバージョンを使わないといけないときの参考にとうぞ。