【问题标题】:Encoding: knitr and child files编码:knitr 和子文件
【发布时间】:2013-02-27 11:26:16
【问题描述】:

我正在使用带有 knitr 1.1 的 Windows 7、R2.15.3 和 RStudio 0.97.320。不知道我的pandoc 版本是什么,但我几天前下载了它。

sessionInfo()
R 版本 2.15.3 (2013-03-01) 平台:x86_64-w64-mingw32/x64(64位)

locale:
[1] LC_COLLATE=Spanish_Argentina.1252  LC_CTYPE=Spanish_Argentina.1252    LC_MONETARY=Spanish_Argentina.1252
[4] LC_NUMERIC=C                       LC_TIME=Spanish_Argentina.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_2.15.3  

我想在html 和 Word 中获取我的报告,所以我使用 markdown 和 pandoc。 我用西班牙语写作,n 上的元音和波浪号都带有重音符号:á-úñ

我阅读了很多帖子,发现与我遇到的问题类似,这些问题已经通过knitr 的新版本得到解决。但是有一个问题我还没有找到解决方案。

开始时,我使用出现在RStudio 对话框中的'system default' 编码,即ISO 8859-1RStudio 预览效果很好。然而,当我尝试获取 Word 文档时,pandoc 被重读的元音卡住了。我发现一篇文章展示了如何使用 iconv 解决这个问题:

iconv -t utf-8 "myfile.md" | pandoc -o "我的文件.docx"| iconv -f utf-8

虽然这确实解决了pandoc's 无法识别的utf-8 字符投诉,但出于某种原因pandoc 停止查找我的情节,并出现如下错误:

pandoc:找不到图像“figure/Parent.png”,正在跳过...

如果我只使用非重音字符,pandoc 会找到没有问题的图像。我用hex 编辑器查看了两个.md 文件,当我比较处理这些数字的部分时,我看不出有任何区别:
![plot of chunk Parent](figure/Parent.png)
虽然很明显强调的字符是完全不同的......我已经验证了图片文件夹中确实存在图像文件

无论如何,在阅读了很多帖子后,我决定将RStudio 设置为使用UTF-8 编码。只有一个级别的文件,事情就很好。例如,我可以 - 独立 - 将以下 2 个 Rmd 文件编织然后 pandoc 到 Word 中:

Parent   -   SAVED WITH utf-8 encoding in RStudio
========================================================

u with an accent: "ú"  SAVED WITH utf-8 encoding in RStudio

```{r fig.width=7, fig.height=6}
plot(cars, main='Parent ú')
```

分别:

Child   -   SAVED WITH utf-8 encoding in RStudio
========================================================

u with an accent: "ú"  Child file

```{r fig.width=7, fig.height=6}
plot(cars, main='One File Child ú')
```

我在RStudio 中获得了 2 个完美的预告片和来自pandoc 的 2 个完美的 Word 文档。

当我尝试从父部件调用子部件时出现问题。换句话说,如果我在第一个文件中添加以下行:

```{r CallChild, child='TestUTFChild.Rmd'}

```  

然后子文件中的所有重音都变成乱码,好像UTF-8 被解释为ISO 8859-1Pandoc 也停止读取文件,抱怨它不是 utf-8

如果有人能指出我正确的方向,要么:

1. 如果我留在ISO 8859-1pandoc 找不到地块。我也试过Windows-1252,因为这是我在sessionInfo看到的,但结果是一样的。

2. 通过调用子文件,如果UTF-8 是要走的路。我一直在寻找一种方法来设置一些选项来强制子调用中的编码,但我还没有找到。

非常感谢!

【问题讨论】:

  • 听起来像是knitr 中的一个错误;我会调查的
  • @Yihui 谢谢!我是 R、markdown 和 knitr 的新手,但我已经对社区的活力和你对它的贡献感到惊讶!

标签: r utf-8 knitr pandoc


【解决方案1】:

我认为这个问题应该在最新的开发版本中修复。请参阅the development repository 中关于如何安装开发版的说明。然后你应该可以在 RStudio 中选择 UTF-8,并得到一个 UTF-8 编码的输出文件。

以防万一有人对血腥细节感兴趣:之前失败的原因是我使用您提供的编码编写了子输出,但没有使用相同的编码读取它。现在我只是避免为child documents 编写输出文件。

【讨论】:

  • 效果很好!!再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多