R:正确读写编码文本

时间:2015-02-05 08:30:48

标签: r encoding

我似乎无法正确编码。尝试重现问题会导致更令人惊讶的结果:

  1. 真正的问题
  2. 我正在阅读的文件中包含的语言包含“ā,č,š,ū”等字符。

    ,例如names <- read.table("file", sep = "|", header = T)

    通过调用View(names),所有特殊字符都应显示为:

    View(names) output

    然而,通过简单地调用names R返回:

    names output

    当我尝试编写文件时,出现了几乎相同的乱码。这就是我想要解决的问题。包含损坏字符的文件不会删除它。

    1. 尝试重现:
    2. a <- c("Šrilanka", "Ķīna", "Kanāda", "Ēģipte") write.csv(a, "test.csv", row.names = F) b <- read.table("test.csv", header = T)

      这会产生非常令人惊讶的结果,因为生成的文件test.csv是完全可读的,但是当我将它读回R时,我遇到了相反的问题。

      调用View(b)会产生:

      enter image description here

      简单地调用b时会产生:

      enter image description here

      完美的文字。

      所以..回到问题的本质。我已将R中的默认文本编码设置为“UTF-8”。我尝试过使用带有混合结果的stringi包:

      > stri_enc_mark(names$city)
      [1] "native" "native" "native" "native" "ASCII"  "native"
      

      强制进行某些编码:

      > stri_encode(names$city, "ASCII", "UTF-8")
      [1] "Balo��i"       "R��ga"         "Kr��slava"     "BAB��TES NOV." "Jelgava"       "R��ga"  
      

      我怀疑最初读取文件时会出现问题。然而,使用View(names)产生所有特殊符号的预期结果的事实有点让我失去平衡。

2 个答案:

答案 0 :(得分:0)

看起来我通过这样做解决了我自己的问题:

read.table(text = readLines("file.csv", encoding = "UTF-8"), sep = "|", header = T)

以某种方式逐行阅读和强制编码这种方式有点起作用。但是,它会大大增加读入时间。这已经是一个完全不同的问题,与这篇文章无关。

答案 1 :(得分:-1)

names <- read.table("file", sep = "|", header = T, encoding="UTF-8")