2014-02-07 56 views
14

我有一個帶字節順序標記(U + FEFF)的文本文件。我正在嘗試讀取R中的文件。是否可以避免字節順序標記?使用BOM讀取一個UTF-8文本文件

函數fread(從data.table包)讀取文件,但在第1可變名稱的開始處添加ļ»æ

> names(frame_pers)[1] 
[1] "ļ»æreg_date" 

同樣是與read.csv功能。

目前我做了一個從第一列名稱中刪除BOM的功能,但我相信應該有一種方法來自動去除BOM。

remove.BOM <- function(x) setnames(x, 1, substring(names(x)[1], 4)) 

> names(frame_pers)[1] 
[1] "ļ»æreg_date" 
> remove.BOM(frame_pers) 
> names(frame_pers)[1] 
[1] "reg_date" 

我使用的是本地編碼爲R對話:

> options("encoding" = "") 
> options("encoding") 
$encoding 
[1] "" 

回答

22

你試過read.csv(..., fileEncoding = "UTF-8-BOM")?file說:

從R 3.0.0編碼「‘UTF-8-BOM’」被接受,並且將刪除 字節順序標記如果存在的話(它通常是用於通過生成的文件和網頁 微軟應用程序)。

+0

同樣不是爲我工作。從notepad ++複製粘貼時,我的原始數據看起來像是「31.1」,但是在R中fread將它分成2列,並用read.csv作爲前綴「」(使用as.is = TRUE)。我使用autohotkey和convert2txt從GUI顯示獲取ocr,並將其寫入文件。這給了我一個問題,即「31.2」變成了「我的.331」 – EngrStudent

4

這是在版本1.9.6和1.9.8與this commit之間處理;更新您的data.table安裝以解決此問題。

一旦這樣做,你可以用fread

fread("file_name.csv") 
+0

不適合我。我的數據前綴爲「」 – EngrStudent

+0

@EngrStudent什麼是您的data.table版本 – MichaelChirico

+0

我使用的是1.10.4。我最終使用「read_csv」並設置「col_types =」c「」,然後在轉換爲數字之前修剪第一個字符。這是一個雜食。 – EngrStudent