【问题标题】:R, utf-8 characters seem to fail in slidifyR,utf-8 字符似乎在 slidify 中失败
【发布时间】:2015-03-30 15:45:17
【问题描述】:

更新 3: 我似乎已经通过密切协调设置 fileEncoding 参数和使用函数 slidify(file.Rmd, encoding="UTF-8") 解决了这个问题,上面的链接会有所帮助,包括 slidify 的 fix-encode 分支除了使用install_github('ramnathv/slidify@fix_encode') 进行滑动之外,还需要它,但它应该很快就会包含在主集中。出于存档目的,我会将其保留在这里。不能说修复它的确切内容,但问题可能是由于输入文件的编码与脚本文件不同,因为默认编码似乎会导致一些问题。我仍然有点不确定到底发生了什么,但我对 slidify 的维护者 Ramnathv 积极参与所有这些讨论表示感谢和惊讶。此修复的故事也在上面的链接中。

我会将这篇文章保留在网上只是为了存档,也许其他人最终会遇到与我所处的情况非常相似的情况。

更新 2: 之前使用 slidify 进行编码存在问题,其中一些已解决,更多信息请参见以下链接:https://github.com/ramnathv/slidify/issues/377http://kohske.github.io/ESTRELA/201412/index.htmlhttps://github.com/ramnathv/slidify/issues/373、@987654324 @

更新:打开包含 utf-8 字符的文件时似乎会出现此问题。在文本中的代码括号内写入r "õ,ä,ü" 似乎工作正常,但是当打开包含 utf-8 字符的变量的文件时会导致脚本出现问题。使用knitr编译成html5时不会出现这些问题。有谁知道这两者之间的区别是什么?

key <- read.csv("key1.csv", header = TRUE, sep = ";", 
        quote = "\"", dec = ".", fill = TRUE, comment.char = "")
print(key)

添加和编码参数,或者fileEncoding似乎没有帮助,html knitr似乎不需要它。

编辑:仍然没有解决,但我可能更接近这种情况的原因。事实证明,虽然 Rmd 本身保存为 UTF-8,但许多使用的数据集在存储时仍恢复为 ANSI。那么可能是混合文件类型的问题。最好的情况slidify(file.Rmd, encoding="UTF-8") 似乎编译.md 并正确编码了字符,但是在数据处理期间由于编码不匹配而导致的错误已经发生。这些问题在常规 knitr Rmd 到 html 的转换中没有发生。

我正在将一个 html Rmarkdown 文档转换为 ioslides 类型的 Rmarkdown 文档,我偶然发现了一个意外问题。该文档在常规 knitr 构造上没有问题,但似乎在 slidify 中使用完全相同的代码、环境和目录遇到字符编码问题。

也就是说,当遇到包含非拉丁字符(例如ä、ü、ö)的变量时,knitr 似乎会崩溃,并且当它输出的文本包含这些字符时,它们会被替换为“?”矩形。

我正在使用基于 Claas-Thido Pfaff 示例的设置:http://cpfaff.github.io/reproducibility/。我还没有找到可以指定或更改语言环境的地方(因为完全相同的文档适用于 html 输出。

---
title       : Reproducible Reports
subtitle    : With R, Knitr, LaTeX and Markdown 
author      : Claas-Thido Pfaff 
job         : http://cpfaff.github.io/reproducibility
framework   : io2012        # {io2012, html5slides, shower, dzslides, ...}
highlighter : highlight.js  # {highlight.js, prettify, highlight}
hitheme     : tomorrow      # 
widgets     : [mathjax, bootstrap]            # {mathjax, quiz, bootstrap}
mode        : selfcontained # {standalone, draft}
knit        : slidify::knit2slides
github      :
  author    : changed
  repo      : reproducibility
---

```{r echo = FALSE, include = F, eval = T}
require(knitr)
hook_source_def = knit_hooks$get('source')
knit_hooks$set(source = function(x, options){
  if (!is.null(options$verbatim) && options$verbatim){
    opts = gsub(",\\s*verbatim\\s*=\\s*TRUE\\s*", "", options$params.src)
    bef = sprintf('\n\n    ```{r %s}\n', opts, "\n")
    stringr::str_c(bef, paste(knitr:::indent_block(x, "    "), collapse = '\n'), "\n    ```\n")
  } else {
     hook_source_def(x, options)
  }
})

require(ggplot2)
```

有什么想法吗?谢谢!

【问题讨论】:

  • 尝试在您的脚本中设置语言环境,如stackoverflow.com/questions/20577764/…。如果您觉得该链接有帮助,您可以点赞。
  • 要获取您当前的语言环境,请使用此函数:Sys.getlocale()
  • 一旦您知道您当前的语言环境,您就可以使用上面链接中建议的语言来回切换
  • 非常感谢您的评论,我已经尝试在脚本中的多个位置设置和获取我的语言环境,不幸的是它没有任何区别,而且似乎一直都是正确的。与常规 knitr 到 html5 输出的相同语言环境。
  • 试试这里发布的答案。 stackoverflow.com/questions/22876746/…。再次,如果您觉得它有帮助,请点赞。谢谢

标签: r html utf-8 slidify


【解决方案1】:

根据@Nisse-Engström 的建议,我将最终解决方案发布为答案,而不是原始问题的更新。我相信现在应该将修复编码集成到主 slidify 包中。

我似乎通过设置 fileEncoding 参数和使用函数 slidify(file.Rmd, encoding="UTF-8") 的密切协调解决了这个问题,上面的链接将有所帮助,因为除了使用 install_github('ramnathv/slidify@fix_encode') 进行 slidify 之外,还需要 slidify 的 fix-encode 分支,但它应该很快就会包含在主集中。出于存档目的,我会将其保留在这里。不能说修复它的确切内容,但问题可能是由于输入文件的编码与脚本文件不同,因为默认编码似乎会导致一些问题。我仍然有点不确定到底发生了什么,但我对 slidify 的维护者 Ramnathv 积极参与所有这些讨论表示感谢和惊讶。此修复的故事也在上面的链接中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2013-01-21
    • 2012-07-09
    • 2016-11-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多