2017-10-29 787 views
2

我想將數據集導入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中沒有編碼選項,我該怎麼做?

+1

您可以檢查[這裏](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

+0

另請注意,'readr'可以通過'locale'讀取備用編碼。但是,根據[軟件包文檔](https://github.com/tidyverse/readr/blob/master/vignettes/locales.Rmd),所有readr函數都會產生以UTF-8 *編碼的字符串 –

+0

感謝您的意見!@ 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壞,好」)' –

回答

3

這是因爲字符被標記爲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

非常感謝您的建議!它工作得很好! –