readr :: read_csv问题:中文字符变成乱码
问题描述:
我想将数据集导入RStudio,但是我被中文字符卡住了,因为它们变成乱码。这里是代码:readr :: read_csv问题:中文字符变成乱码
library(tidyverse)
df <- read_csv("中文,英文\n英文,德文")
df
# A tibble: 1 x 2
`\xd6\xd0\xce\xc4` `Ӣ\xce\xc4`
<chr> <chr>
1 "<U+04E2>\xce\xc4" "<U+00B5>\xc2\xce\xc4"
当我使用基本函数read.csv,它工作正常。我想我必须在编码方面做一些错误。但是在read_csv中没有编码选项,我该怎么做?
答
这是因为字符被标记为UTF-8
而实际编码是系统默认值(您可以通过stringi::stri_enc_get()
得到)。
所以,你可以做两种:
1)阅读与正确的编码数据:
df <- read_csv("中文,英文\n英文,德文", locale = locale(encoding = stringi::stri_enc_get()))
2)不正确的编码读取数据,并用正确的编码之后将它们标记(注意,这并不总是奏效):
df <- read_csv("中文,英文\n英文,德文")
df <- dplyr::mutate_all(df, `Encoding<-`, value = "unknown")
+0
非常感谢您的建议!它工作得很好! –
您可以检查[这里](https://stackoverflow.com/questions/22876746/how-to-read-data-in-utf-8-format-in- r)或[这里](https://stackoverflow.com/questions/20577764/set -locale-to.系统默认UTF-8)。在'read_csv'中,有一个'locale'参数。根据文档'语言环境 语言环境控制的默认值因地而异。默认语言环境以美国为中心(如R),但您可以使用locale()创建自己的语言环境,以控制默认时区,编码,小数点,大标记和日/月名称等内容。 – akrun
另请注意,'readr'可以通过'locale'读取备用编码。但是,根据[软件包文档](https://github.com/tidyverse/readr/blob/master/vignettes/locales.Rmd),所有readr函数都会产生以UTF-8 *编码的字符串 –
感谢您的意见!@ akrun @Kevin Arseneau我按照你的说法尝试过。但它仍然无法工作。 Sys.setlocale(category =“LC_ALL”,locale =“English_United States.1252”) read_csv(“a,b \ n坏,好”) Sys.setlocale(category =“LC_ALL”,locale =“chinese” ) read_csv(“a,b \ n坏,好”)' –