【问题标题】:R: read and write encoded texts properlyR:正确读取和写入编码文本
【发布时间】:2015-02-05 08:30:48
【问题描述】:

我似乎无法使编码正常工作。并且尝试重现该问题会导致更令人惊讶的结果:

  1. 真正的问题

我正在阅读的文件的语言文本包含“ā、č、š、ū”等字符。

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

通过调用View(names),所有特殊字符都按原样显示:

但是,通过简单地调用names R 返回:

当我尝试写入文件时,会出现几乎相同的乱码。这就是我要解决的问题。带有损坏字符的文件不会剪切它。

  1. 试图重现:

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) 会产生:

虽然简单地调用 b 会产生:

完美的文字。

所以..回到问题的本质。我已将 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) 会产生预期的结果,所有特殊符号都在位,这让我失去了平衡。

【问题讨论】:

    标签: r encoding


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      names <- read.table("file", sep = "|", header = T, encoding="UTF-8")
      

      【讨论】:

      • 到目前为止,我已经通过 RStudio 全局选项菜单更改了编码,到目前为止至少尝试了 10 种不同的编码,每次都重新启动 R。不..也许我应该选择一些特定的编码? RStudio 有一个令人印象深刻的列表..
      • @A.Val。打开文件并假设它是 UTF-8 怎么样?改变了我的答案。如果它有效,它应该比每列读取行更有效。
      猜你喜欢
      • 2017-09-18
      • 2018-11-03
      • 2013-10-17
      • 1970-01-01
      • 2012-09-04
      • 2011-07-07
      • 2016-10-06
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多