come leggere i dati in formato utf-8 in R?

Il mio sistema: win7 + R-3.0.2.

> Sys.getlocale() [1] "LC_COLLATE=Chinese (Simplified)_People's Republic of China.936;LC_CTYPE=Chinese (Simplified)_People's Republic of China.936;LC_MONETARY=Chinese (Simplified)_People's republic of China.936;LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_People's Republic of China.936" 

Ci sono due file con lo stesso contenuto salvati nel blocco note di Microsoft: uno viene salvato come formato ansi, l’altro viene salvato come formato utf8. I dati sono il nome di morte in M370 Malaysia Airlines. O puoi creare il file in questo modo.

1) copia i dati nel blocco note di Microsoft.

 乘客姓名,性别,出生日期HuangTianhui,男,1948/05/28姜翠云,女,1952/03/27李红晶,女,1994/12/09 

2) salvalo come test.ansi con formato ansi nel blocco note.
3) salvalo come test.utf8 con il formato utf-8 nel blocco note.

 read.table("test.ansi",sep=",",header=TRUE) #can work fine read.table("test.utf8",sep=",",header=TRUE) #can't work 

Quindi, ho impostato la codifica in utf-8.

 options(encoding="utf-8") read.table("test.utf8",sep=",",header=TRUE,encoding="utf-8") In read.table("test.utf8", sep = ",",header=TRUE,encoding = "utf-8") : invalid input found on input connection 'test.utf8' 

Come posso leggere il file di dati (test.utf8)?
In Python, è così semplice

 rfile=open("g:\\test.utf8","r",encoding="utf-8").read() rfile '\ufeff乘客姓名,性别,出生日期\n\nHuangTianhui,男,1948/05/28\n\n姜翠云,女,1952/03 /27\n\n李红晶,女,1994/12/09' rfile.replace("\n\n","\n").replace("\ufeff","").splitlines() ['乘客姓名,性别,出生日期', 'HuangTianhui,男,1948/05/28', '姜翠云,女,1952/03/27', '李红晶,女,1994/12/09'] 

Python può fare questo lavoro meglio di R.

Faccio come dice Sathish, il problema è risolto un po ‘, ne rimangono ancora alcuni.
Ho scoperto che quando i dati sono in data.frame, non possono essere visualizzati correttamente,
quando i dati sono una colonna di data.frame, possono essere visualizzati correttamente,
abbastanza strano, quando i dati sono una riga di data.frame, non possono essere visualizzati correttamente.

inserisci la descrizione dell'immagine qui

inserisci la descrizione dell'immagine qui

Sistema operativo: Windows 7 (64 bit)

Versione R:

 package_version(R.version) [1] '3.0.2' 

Cambia la tua localizzazione da “cinese” a “English_United States.1252”

  Sys.setlocale(category="LC_ALL", locale = "English_United States.1252") Sys.getlocale(category="LC_ALL") [1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252" 

Leggi i dati con la codifica cinese

  df_ch <- read.table("test.utf8", sep=",", header=FALSE, encoding="chinese", stringsAsFactors=FALSE ) 

Leggi i dati con la codifica UTF-8

  df_utf8 <- read.table("test.utf8", sep=",", header=FALSE, encoding="UTF-8", stringsAsFactors=FALSE ) 

In RStudio versione 0.98.501

  df_ch$V1[1] [1] "乘客姓å" df_utf8$V1[1] [2] "乘客姓名" df_utf8$V1 [1] "乘客姓名" "HuangTianhui" "姜翠云" "李红晶" "LuiChing" "宋飞飞" [7] "唐旭东" "YangJiabao" "买买提江·阿布拉" "安文兰" "鲍媛华" "边亮京" [13] "边茂勤" "曹蕊" "车俊章" "陈长军" "陈建设" "陈昀" [19] "戴淑玲" "丁立军" "丁莹" "丁颖" "董国伟" "杜文忠" [25] "冯栋" "冯纪新" "付宝峰" "甘福祥" "甘涛" "高歌" [31] "管文杰" "韩静" "侯爱琴" "侯波" "胡偲婠(婴儿)" "胡效宁" 

Visualizza dati unicode per una riga da un frame di dati

  df_utf8[1,] V1 V2 V3 1    

Visualizza dati cinesi per una riga da un frame di dati

 as.character(df_utf8[1,]) [1] "乘客姓名" "性别" "出生日期" as.character(df_utf8[2,]) [1] "HuangTianhui" "男" "1948/05/28" 

La visualizzazione di più colonne di dati con caratteri internazionali può essere eseguita convertendo il frame di dati in un elenco e forzando i dati in formato carattere.

  df_utf8_ch <- lapply(df_utf8, as.character) df_utf8_ch 

$ V1 1 "乘客 姓名" "HuangTianhui" "姜翠云" "李红晶" "LuiChing" "宋飞飞"
7 "唐旭东" "YangJiabao" "买买提 江 · 阿布拉" "安文兰" "鲍媛华" "边 亮 京"
[13] "边 茂 勤" "曹 蕊" "车 俊 章" "陈长军" "陈 建设" "陈 昀"
[19] "戴淑玲" "丁立军" "丁 莹" "丁颖" "董国伟" "杜文忠"
[25] "冯 栋" "冯 纪 新" "付宝峰" "甘福祥" "甘 涛" "高歌"
[31] "管 文杰" "韩 静" "侯爱琴" "侯波" "胡 偲 婠 (婴儿)" "胡 效 宁"
[37] "黄毅" "姜学仁" "姜 颖" "焦 微微" "焦 文学" "鞠 坤"
[43] "康旭" "黎明 中" "李国辉" "李洁" "李 乐" "李文博"
[49] "李燕" "李宇辰" "李志 锦" "李志欣" "李智" "栗 延 林"
[55] "梁 路 阳" "梁旭阳" "林安南" "林明峰" "刘凤英" "刘金鹏"
[61] "刘强" "刘如生" "刘顺 超" "柳忠福" "楼 宝 棠" "卢 先 初"
[67] "鹿 建华" "罗伟" "马骏" "马文芝" "毛 土 贵" "么 立 飞"
[73] "蒙 高 生" "孟 兵" "孟凡 余" "欧阳 欣" "石贤文" "宋春玲"
[79] "宋 坤" "苏 强国" "汤 雪竹" "田军伟" "田清君" "汪 厚 彬"
[85] "王春勇" "王纯华" "王丹" "王海涛" "王利军" "王 林诗"
[91] "王 墨 恒 (婴儿)" "王守宪" "王淑敏" "王献军" "王永刚"

$ V2 1 "性别" "男" "女" "女" "女" "男" "男" "女" "男" "女" "女" "男" "女" "女" "女" "男"
[17] "男" "女" "女" "男" "女" "女" "男" "男" "男" "男" "男" "男" "男" "女" "男" "女"
[33] "女" "男" "女" "男" "女" "男" "女" "女" "男" "男" "男" "男" "男" "女" "男" "女"
[49] "女" "男" "男" "男" "男" "男" "男" "男" "男" "男" "女" "男" "男" "男" "男" "男"
[65] "男" "男" "男" "男" "男" "女" "男" "男" "男" "男" "男" "女" "男"
$ V3 1 "出生 日期" "1948/05/28" "1952/03/27" "1994/12/09" "1969/08/02" "1982/03/01" "1983/08/03" " 1988/08/25 "[9]" 1979/07/10 "" 1949/10/20 "" 1951/10/21 "" 1987/06/06 "" 1947/07/19 "" 1982/02/19 "" 1946/03/20 "" 1979/06/06 "[17]" 1956/03/07 "" 1957/08/11 "" 1956/12/07 "" 1971/04/06 "" 1952/04 / 25 "" 1986/10/24 "" 1966/10/26 "" 1964/06/07 "[25]" 1993/03/09 "" 1944/01/06 "" 1986/12/06 "" 1965 / 11/21 "" 1970/01/29 "" 1987/11/16 "" 1979/10/03 "" 1961/05/28 "[33]" 1969/06/24 "" 1979/05/15 " "2011/02/25" "1980/01/01" "1984/06/18" "有待 确认" "1987/04/13" "1983/05/09" [41] "1956/12/17" " 1982/11/07 "" 1980/08/09 "" 1945/12/19 "" 1958/05/18 "" 1987/02/06 "" 1982/12/03 "" 1985/07/16 "[49 ] "1983/07/19" "1987/11/06" "1984/04/14" "1979/05/22" "1973/05/05" "1985/10/26" "1954/03/26" "1984/11/12" [57] "1987/03/27" "1980/05/25" "1949/05/10" "1981/12/26" "1974/08/13" "1938/01 / 22 "" 1968/02/29 "" 1942/05/22 "[65]" 1935/04/21 "" 1981/10/14 "" 1957/03/28 "" 1985/08/20 "" 1981 / 12/25 "" 1957/08/01 "" 1942/08/02 "" 1983/06/15 "[73]" 1950/01/0 1 "" 1974/04/26 "" 1944/08/23 "" 1976/10/12 "" 1988/01/18 "" 1954/04/06 "

  View(df_ch) 

codifica cinese

  View(df_utf8) 

inserisci la descrizione dell'immagine qui

In RGui (64 bit)

inserisci la descrizione dell'immagine qui

Vista (df_ch)

inserisci la descrizione dell'immagine qui

Vista (df_utf8)

inserisci la descrizione dell'immagine qui

La cosa buona è che hai tutti i dati in formato utf8 da utilizzare per ulteriori analisi dei dati.

Una volta che l'analisi è terminata, puoi cambiare le impostazioni locali in "cinese"

  Sys.setlocale(category="LC_ALL", locale = "chinese") Sys.getlocale(category="LC_ALL") [1] "LC_COLLATE=Chinese (Simplified)_People's Republic of China.936;LC_CTYPE=Chinese (Simplified)_People's Republic of China.936;LC_MONETARY=Chinese (Simplified)_People's Republic of China.936;LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_People's Republic of China.936" 

Alcune funzioni che potresti dover esplorare per la conversione tra codifiche di stringhe di caratteri.

Encoding ()

iconv ()

HTH

Prova un argomento diverso per read.table: fileEncoding :

  read.table("test.utf8", sep = "," , header=TRUE, fileEncoding = "UTF-8")