2013-05-30 95 views
20

我有一個.csv文件,其中包含以下數據:無法讀取的unicode的.csv成R

"Ա","Բ" 
1,10 
2,20 

,使顯示的列名像他們在文件中我無法讀入R上。

d <- read.csv("./Data/1.csv", fileEncoding="UTF-8") 
head(d) 

產生如下:

> d <- read.csv("./Data/1.csv", fileEncoding="UTF-8") 
Warning messages: 
1: In read.table(file = file, header = header, sep = sep, quote = quote, : 
    invalid input found on input connection './Data/1.csv' 
2: In read.table(file = file, header = header, sep = sep, quote = quote, : 
    incomplete final line found by readTableHeader on './Data/1.csv' 
> head(d) 
[1] X. 
<0 rows> (or 0-length row.names) 

同時,未經指定fileEncoding做同樣會產生這樣的:

> d <- read.csv("./Data/1.csv") 
> head(d) 
    Ô. Ô² 
1 1 10 
2 2 20 

當我運行 「文件」 工具來找出編碼它說它是UTF-8:

Data\1.csv: UTF-8 Unicode text, with CRLF line terminators 

我正在使用RStudio,Windows 7,R版本2.15.2,32位。

在此先感謝。

+0

在Linux上完全適用於R 2.15.3。 (第二個警告可能只是在文件的最後一行缺少「輸入」) – Spacedman

+4

我可以複製該問題。我從來沒有使用這些參數,但是使用'encoding'代替'read.csv(...,encoding =「UTF-8」)'讀入文件,但是頭文件不是以字母顯示,而是以' XUFEFF..U.0531。改爲X.U.0532.'。 – eddi

+1

觀察:'> a =「Ա」; > a; [1]「Ա」'工作正常,但這不:'data.frame(a); #a #1 ' – eddi

回答

0

我試過兩種方法來複制你的問題。

我複製的字符以上到RStudio,它使用此代碼保存爲CSV:

write.csv(c("Ա","Բ", 
      1,10, 
      2,20), "test.csv") 

df <- read.csv("test.csv") 

這工作得很好。

然後我想,也許R是作弊,當我將它保存爲CSV與R?所以我只是將這些字符粘貼到一個文本文件並保存爲一個CSV文件。這種方法也沒有問題。

這裏是我的會話信息:

sessionInfo() 
R version 3.0.1 (2013-05-16) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_CA.UTF-8  LC_NUMERIC=C    LC_TIME=en_CA.UTF-8  
[4] LC_COLLATE=en_CA.UTF-8  LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8 
[7] LC_PAPER=C     LC_NAME=C     LC_ADDRESS=C    
[10] LC_TELEPHONE=C    LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats4 grid  stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] party_1.0-9  modeltools_0.2-21 strucchange_1.4-7 sandwich_2.2-10 zoo_1.7-10  
[6] GGally_0.4.4  reshape_0.8.4  plyr_1.8   ggplot2_0.9.3.1 

loaded via a namespace (and not attached): 
[1] coin_1.0-23  colorspace_1.2-2 dichromat_2.0-0 digest_0.6.3  
[5] gtable_0.1.2  labeling_0.2  lattice_0.20-23 MASS_7.3-29  
[9] munsell_0.4.2  mvtnorm_0.9-9995 proto_0.3-10  RColorBrewer_1.0-5 
[13] reshape2_1.2.2  scales_0.2.3  splines_3.0.1  stringr_0.6.2 
0

我有同樣的問題,並發現該文件已損壞。

我用OpenOffice打開了文件並使用「UTF8」字符集將其保存回來(您需要單擊編輯過濾器設置框),然後使用read.csv()(無編碼或filencoding選項)將其導入並且工作正常。

11

我在這裏寫了一個關於同一問題的較長答案:R on Windows: character encoding hell

快速回答,使用參數編碼而不是fileEncoding應該可以解決您的第一個問題。您無法在RStudio的控制檯或表格視圖中閱讀它,但您可以在公式中使用它。

d <- read.csv("./Data/1.csv", encoding="UTF-8") 
head(d) 

救了你的表成UTF-8文件:

> test2 <- read.csv("test2.csv", header = FALSE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", encoding = "UTF-8") 
Warning message: 
In read.table(file = file, header = header, sep = sep, quote = quote, : 
    incomplete final line found by readTableHeader on 'test2.csv' 

這給了你怎麼看起來像在控制檯和RStudio視圖

> test2 
     V1  V2 
1 <U+0531> <U+0532> 
2  1  10 
3  2  20 

但是重要的是你能在R中操作。因此,在我的情況下,可以看到腳本窗口輸入Ա具有UTF-8編碼,並且grep可以正確地在您的表中找到此編碼。

> Encoding("Ա") 
[1] "UTF-8" 
> grep("Ա", as.character(test2[1,1])) 
[1] 1 

您可能需要找到適合您的設置的編碼變體,或者可能需要更改它們。不幸的是,我不確定它在哪裏完成。

您可能無法在所有階段都使它變得漂亮,但在Windows 7環境中也可以使其發揮作用。