[問題] 當read_csv遇到utf-8-BOM

看板R_Language作者 (locka)時間7年前 (2018/03/21 15:25), 7年前編輯推噓2(209)
留言11則, 4人參與, 7年前最新討論串1/1
各位好: 我使用readr::read_csv讀取csv檔 ex:a <- read_csv("xxx.csv") 按下enter後出現幾行字: Parsed with colum specification: cols( `<U+FEFF>id` = col_character(), ... ) 當時沒有想太多, 因為View(a)看起來都很正常 接著要把 a 跟其他的 dataFrame merge的時候總是會出現錯誤: Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column 用dplyr::left_join()則是會出現: Error in left_join_impl(x, y, by$x, by$y, suffix$x, suffix$y) : 'id' column not found in rhs, cannot join 懷疑應該是那個`<U+FEFF>id`在作怪 用關鍵字找到這篇 https://github.com/tidyverse/readr/issues/263 不過看完還是不知道發生了甚麼事...@@a 不曉得有人可以協助解釋嗎? 1. UTF-8-BOM 跟 UTF-8 的差別? (之前讀csv檔從來沒注意過有這個問題) 2. R 要怎麼正確的讀取 UTF-8-BOM 的檔案呢? 任何觀念的釐清小弟都很歡迎 先謝謝各位了!!! ps. 最後我是用很笨的方法 a <- a %>% select(id=`<U+FEFF>id`...) 把欄位改名後就可以成功merge(但還是想知道大家遇到這問題都怎麼處理的) 補充: 用names(a), colnames(a), summary(a)看起來欄位都顯示正常 不過head(a)會顯示以下的東西 # A tibble: 6 × 5 `<U+FEFF>id` <chr> ...... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.174.63 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1521617104.A.BC4.html ※ 編輯: locka (223.136.174.63), 03/21/2018 15:40:17

03/21 18:28, 7年前 , 1F
不要用read_csv就可以了吧
03/21 18:28, 1F
O大有推薦的處理套件嗎? ※ 編輯: locka (223.136.174.63), 03/21/2018 19:42:03

03/21 21:18, 7年前 , 2F
BOM 是 windows 在存 utf-8 csv 的時候在開頭加入的三個
03/21 21:18, 2F

03/21 21:21, 7年前 , 3F
byte……手動修改的話可以用 notepad++ 讀入後存成非BOM
03/21 21:21, 3F

03/21 21:21, 7年前 , 4F
utf-8 的格式
03/21 21:21, 4F
感謝說明,不過我好奇為什麼View(a)的時候 不會出現像亂碼的東西 可是head(a)就會 第二是有沒有辦法偵測讀入檔案時, 該檔案是以哪種編碼儲存? ※ 編輯: locka (223.136.174.63), 03/21/2018 22:32:28

03/21 23:40, 7年前 , 5F
因為BOM是没有「外觀」的,而你看到的亂碼能方便顯示這
03/21 23:40, 5F

03/21 23:40, 7年前 , 6F
類没有外觀但又存在的字符
03/21 23:40, 6F

03/21 23:42, 7年前 , 7F
要用R去除BOM也不難,google R read utf-8 BOM資料很多
03/21 23:42, 7F

03/21 23:46, 7年前 , 8F
參考看看 https://goo.gl/Q3Sc9g 但我相信read_csv()未
03/21 23:46, 8F

03/21 23:46, 7年前 , 9F
來更新後會處理
03/21 23:46, 9F

03/22 09:57, 7年前 , 10F
可以先用 readBin 讀進來之後丟掉前三個 bytes, 然後用
03/22 09:57, 10F

03/22 09:57, 7年前 , 11F
connection 丟給 read.table 處理
03/22 09:57, 11F
文章代碼(AID): #1QiWZGl4 (R_Language)
文章代碼(AID): #1QiWZGl4 (R_Language)