我似乎无法正确编码。尝试重现问题会导致更令人惊讶的结果:
我正在阅读的文件中包含的语言包含“ā,č,š,ū”等字符。
,例如names <- read.table("file", sep = "|", header = T)
通过调用View(names)
,所有特殊字符都应显示为:
然而,通过简单地调用names
R返回:
当我尝试编写文件时,出现了几乎相同的乱码。这就是我想要解决的问题。包含损坏字符的文件不会删除它。
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)
产生所有特殊符号的预期结果的事实有点让我失去平衡。
答案 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")