如何修复R中的混乱编码?

时间:2016-11-22 16:09:12

标签: r encoding utf-8 codepages

我有一个文件夹(~1000个文件),我想用另一个字符串替换所有文件中的字符串。问题是这些文件包含像“à”这样的字符,这些字符在转换为ANSI时会搞砸。我以为我已经采取了一切预防措施,以确保R不会因为莫名其妙的偏好而把所有东西都变成ANSI,但是我失败了。我没有对它进行过足够的测试,现在我所拥有的每个文件都会让每一个特殊字符都搞砸了 我知道它可以撤消,因为通过反复试验我发现Notepad ++中的以下操作撤消了R已经完成的损坏,在编码选项卡下单击:
转换为UTF-8
转换为ANSI
以UTF-8编码 但是我更喜欢如果我不必手动更正1000个文件。 R有没有办法做同样的事情?我包含了搞乱下面文件的代码。复制问题:
1.用UTF-8编码在notepad ++(或任何其他文本编辑器)中创建一个只包含字母“à”的文件(注意重音)。
2.将文件保存在另外的空文件夹中 3.将以下代码的sourcefolder-variable设置为此文件夹 4.运行下面的代码。

subInFiles <-function()
{
  utf8Write <- function(con, msg="") {
         con <- file(con, encoding = "UTF-8")
         tryCatch({
               cat(iconv(msg, to="UTF-8"), file=con, sep="\n")
           },
           finally = {
                 close(con)
             })
  }
  sourceFolder <- file.path("~", "myFolder")
  targetFolder <- sourceFolder
  names <- list.files(sourceFolder)
  regexMatch <- "someString"
  regexReplace <- "anotherString"
  fileContents <- sapply(names, function(name){ paste0(readLines( con = file.path(sourceFolder, name), encoding = "UTF-8" ), collapse = "\n") })
  print(fileContents[1])
  sapply(1:length(names), function(i) { utf8Write(con = file.path(targetFolder, names[i]), gsub(regexMatch, regexReplace, fileContents[i])) })
  return()
}

编辑:感谢您的回复。回归:我同意预防胜于解决。然而,此时已经犯了错误。我的文件的编码已经搞砸了,所以我别无选择,只需要修复而不是更好的代码 Re JoseF:以下几行代码可以看出这个问题:

 readLines( con = file.path(sourceFolder, name), encoding = "UTF-8" )
 readLines( con = file.path(sourceFolder, name), encoding = "ANSI" )

如果我们从一个内容为“à\ n”的文件开头,我们得到这两行的输出:
[1]“à”
[1]“Ô
然而,在应用上述函数后,应用于同一文件的相同行给出:
[1]“Ô
[1]“Ô

0 个答案:

没有答案