[爆卦]bom utf-8是什麼?優點缺點精華區懶人包

為什麼這篇bom utf-8鄉民發文收入到精華區:因為在bom utf-8這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者locka (locka)看板R_Language標題[問題] 當read_csv遇到utf-8...


各位好:

我使用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
obarisk: 不要用read_csv就可以了吧03/21 18:28

O大有推薦的處理套件嗎?
※ 編輯: locka (223.136.174.63), 03/21/2018 19:42:03
kimball: BOM 是 windows 在存 utf-8 csv 的時候在開頭加入的三個03/21 21:18
kimball: byte……手動修改的話可以用 notepad++ 讀入後存成非BOM03/21 21:21
kimball: utf-8 的格式03/21 21:21
感謝說明,不過我好奇為什麼View(a)的時候
不會出現像亂碼的東西
可是head(a)就會
第二是有沒有辦法偵測讀入檔案時,
該檔案是以哪種編碼儲存?

※ 編輯: locka (223.136.174.63), 03/21/2018 22:32:28
andrew43: 因為BOM是没有「外觀」的,而你看到的亂碼能方便顯示這 03/21 23:40
andrew43: 類没有外觀但又存在的字符 03/21 23:40
andrew43: 要用R去除BOM也不難,google R read utf-8 BOM資料很多 03/21 23:42
andrew43: 參考看看 https://goo.gl/Q3Sc9g 但我相信read_csv()未 03/21 23:46
andrew43: 來更新後會處理 03/21 23:46
Wush978: 可以先用 readBin 讀進來之後丟掉前三個 bytes, 然後用 03/22 09:57
Wush978: connection 丟給 read.table 處理 03/22 09:57

你可能也想看看

搜尋相關網站