私はë
のような「特殊文字」を含むRMarkdown文書を持っています。 RStudio Serverの "knit document"ボタンを使用してドキュメントをレンダリングすると、レンダリングがうまくいきます。 RStudio Serverボタンを使ってレンダリングすると、RMarkdown
のrender
関数を呼び出す別のRスクリプトをソースにしても、それはうまく描画されます。その同じRスクリプトが呼び出されたときにRMarkdownの `render`動作は、RStudio Serverから呼び出されるのか、PHPシェルから呼び出されるのかによって異なります。
しかし、(長いため、できればないけど)私を超えますいくつかの理由から、私が使用してindex.php
によって異なる結果を得る:私はこれを行うと、得られる
$results = shell_exec("R --file='/home/username/public_html/some/subdirectories/process.R' --no-save 2>&1");
.htmlファイルでは、特別なシンボル(私はユニコードシンボルと思われる)は<U+00EB>
に置き換えられます。私はこれがまだ知らないHTML要素のバリエーションであるかどうかを調べようとしましたが、これについて何も見つけることができませんでした。
(注:私がこれについてもっと学ぶことができる場所へのリンク(そして、私たちがそれをしている間、私のブラウザはそれが表示しているように、 !example.php
の感謝)
再現可能例
内容:
<?php
shell_exec("R --file='/home/username/public_html/subdirectory/example.R' --no-save 2>&1");
?>
のの
内容(これは私が私のサーバー上で必要なものである):example.Rmd
の
workingPath <- "/home/username/public_html/subdirectory";
### Set path to RStudio's pandoc version
Sys.setenv(PATH=paste(Sys.getenv("PATH"),
"/usr/lib/rstudio-server/bin/pandoc",
sep=":"));
### Set HOME and LANG
Sys.setenv(HOME = '/home/username');
Sys.setenv(LANG = 'en_US.UTF-8');
require(rmarkdown);
renderResults <-
render(file.path(workingPath, 'example.Rmd'),
output_file = file.path(workingPath, 'example.html'),
intermediates_dir = file.path(workingPath, 'tmp'),
encoding="UTF-8");
内容:この例の
---
title: 'Reproducable example'
output: html_document
---
```{r}
cat("This is an ë symbol.");
```
結果:
R Studioからこれを実行すると、次のようになります。
cat( "これは記号です");
# #これは記号です。
私はPHPからこれを実行すると、私が手:
猫( "これはë記号です。");
# #これは< U + 00EB >シンボルです。
(興味深いことに、echo
'edëが正常に表示される)
私は今index.php
ファイルにstr_replace
を行うに頼っが、それは理想的ではありません。
render
マニュアルを確認しましたが、この動作については何も見つかりません。
また、.RmdファイルのYAMLヘッダーでpandoc
のオプションを指定してみましたが、近いと思われるのは--ascii
optionなので、何もしません。 R Studio RMarkdown pageにはヒントもありません。
おそらく、RStudioで設定されている環境変数と関係がありますか?私はすでに設定しなければならなかった:Rスクリプトで
Sys.setenv(HOME = '/home/oupsyusr');
Sys.setenv(LANG = 'en_US.UTF-8');
をPandocは、PHPのシェルから呼び出されたRスクリプトで呼ばれる最初の場所で起こって取得します。これが問題であれば、RStudioがどんな値に設定するか、より正確にどの設定を重要なものに設定するのか、どうすればわかりますか?私は走った:
Sys.getenv()
これはかなりのリストを示しています。エントリーのどれもエンコーディングとは関係ないと認識しています。
または、これを引き起こしますか? .mdファイルを保存して検査すると、Unicode要素のものが既に表示されます。しかし、knitr help page with chunk optionsは、一般にユニコードやエンコーディングについては何も言いません。
これはどこに文書化されていますか、誰かがこの状況に遭遇したことはありますか?
私はCentOS 6.8でRStudio 0.99.903とR 3.3.1を実行しています。
それぞれの場合に '' Sys.getlocale( "LC_ALL")の出力は何ですか? Rセッションは、PHPの場合、UTF-8以外のロケールで実行されているとRセッションが信じている可能性があります。それが問題ならば、Rがシステムロケールで表現できないUnicode文字を発見している可能性があります。代わりにUnicodeコードポイント表現を印刷するだけです。 –
@KevinUshey、これにスポットがあるようです! RStudioから、ロケールはしばしば 'en_US.UTF-8'に設定され、時には 'C'([デフォルトの見かけ上](https://stat.ethz.ch/R-manual/R-devel/library/) base/html/locales.html))。私が呼ぶときにPHPからは、唯一のCに設定しています: 'Sys.setlocale( 'LC_ALL'、 "EN_US.UTF-8");' それは働きます!ありがとうございました!!!何時間もの不満の後に何かを解決することは常に満足しています:-)あなたのコメントを答えに変えることができるので、私はそれを受け入れることができますか? – Matherion
ええ ''はロケールの問題を示すことが多く、 'C'ロケールはしばしばLinuxの犯人です。 –