【问题标题】:R trouble with enconding writing content to fileR 将内容写入文件的编码问题
【发布时间】:2015-03-26 22:41:12
【问题描述】:

我在将内容写入文件时遇到问题。 这是一个非常简单的案例,这几天我一直在琢磨。

我有一个名为 teste.R 的 R 文件,代码如下:

teste <- function(fileContent, fileName) {
  fileConn<-file(fileName)
  writeLines(fileContent, fileConn)
  close(fileConn)   
}

page <- ''
page <- paste(page, 'ãõéç')

teste(page, 'file_.html')

嗯,我在 R-Studio 上以两种不同的方式运行这段代码:

1 - 我只是在控制台上运行teste 函数。

2 - 我在控制台上运行以下命令:

source('F:/Dropbox/TESE/Projeto/AnaliseSAA/teste.R')

在这两种情况下,我在文件中都得到了相同的内容:ãõéç 到目前为止一切正常。但是,如果我在浏览器上打开文件,我会得到两个不同的输出:

1- ãõéç

2- ãõéç

所有这一切都是因为我正在创建一个 HTML 页面来显示我在 R 中所做的分析,而页面在这种错误编码下看起来很糟糕。

谢谢。

【问题讨论】:

标签: r


【解决方案1】:

如果您想创建 HTML 文件,最好使用现有工具,例如 RStudio 的 htmltools 包,或使用 markdown 包。因为如果你不包括标准标签,包括声明编码的标签,你会很痛苦。

以下建议对您有用:

库(htmltools)

teste <- function(fileContent, fileName) {
  content <- tags$html(HTML('<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"></head>'),
                       tags$body(fileContent))
  outfile <- file(description = fileName, open = "w", encoding = "UTF-8")
  capture.output(content, file = outfile)
  close(outfile)
}

page <- ''
page <- paste(page, 'ãõéç')

teste(page, 'file_.html')

编辑

另一种方法是用这样的函数替换重音字符(包中可能有一个预先存在的函数,但我不知道有一个):

repl.accent <- function(x) {
    accent <- c("À", "à", "Â", "â", "Ç", "ç", "È", "è", "É", "é", "Ê", "ê", "Ë", "ë",
                "Î", "î", "Ï", "ï", "Ñ", "ñ", "Ô", "ô", "Ö", "ö", "Ù", "ù", "Û", "û", 
                "Ü", "ü","'")
   repl  <- c("&#192;", "&#224;", "&#194;", "&#226;", "&#199;", "&#231;", "&#200;",
              "&#232;", "&#201;", "&#233;", "&#202;", "&#234;", "&#203;", "&#235;",
              "&#206;", "&#238;", "&#207;", "&#239;", "&#209;", "&#241;", "&#212;",
              "&#244;", "&#214;", "&#246;", "&#217;", "&#249;", "&#219;", "&#251;",
              "&#220;", "&#252;", "&#39;")
   stringi::stri_replace_all_fixed(str = x, pattern = accent, replacement = repl, vectorize_all = FALSE)
}

repl.accent('éçà')
[1] "&#233;&#231;&#224;"

【讨论】:

  • 好的,谢谢您的建议。我现在将探索 R htmltools 库。但不幸的是,问题仍然存在。我在两个文件中得到完全相同的内容,但第二个文件的编码仍然错误。发生这种情况的原因很奇怪,因为文本编辑器中的两个文件完全相同,但在浏览器上却不同。
  • 查看我的编辑以了解另一种方法。不过,您需要为 ã 和 õ 添加正确的代码。
  • 我忘了提到我尝试过 UTF-8 但它不起作用。幸运的是你的第二个建议奏效了,我只需要添加一些额外的字符。非常感谢楼主。
  • 不客气!我对第一个函数进行了一些修改,以确保输出文件是用 utf8 编码编写的(并且由于没有声明“doctype”,因此也使用了 html4 声明编码的方式),因此解决方案通常应该现在也可以正常工作了...如果您进行测试,请告诉我是否可以?
  • 我试过了,是的,它成功了!!我将使用这种方法知道而不是以前的方法。再次感谢您。
猜你喜欢
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
相关资源
最近更新 更多