作者locka (locka)
看板R_Language
标题[问题] 当read_csv遇到utf-8-BOM
时间Wed Mar 21 15:24:59 2018
各位好:
我使用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://webptt.com/cn.aspx?n=bbs/R_Language/M.1521617104.A.BC4.html
※ 编辑: locka (223.136.174.63), 03/21/2018 15:40:17
1F:→ obarisk: 不要用read_csv就可以了吧03/21 18:28
O大有推荐的处理套件吗?
※ 编辑: locka (223.136.174.63), 03/21/2018 19:42:03
2F:推 kimball: BOM 是 windows 在存 utf-8 csv 的时候在开头加入的三个03/21 21:18
3F:推 kimball: byte……手动修改的话可以用 notepad++ 读入後存成非BOM03/21 21:21
4F:→ kimball: utf-8 的格式03/21 21:21
感谢说明,不过我好奇为什麽View(a)的时候
不会出现像乱码的东西
可是head(a)就会
第二是有没有办法侦测读入档案时,
该档案是以哪种编码储存?
※ 编辑: locka (223.136.174.63), 03/21/2018 22:32:28
5F:→ andrew43: 因为BOM是没有「外观」的,而你看到的乱码能方便显示这 03/21 23:40
6F:→ andrew43: 类没有外观但又存在的字符 03/21 23:40
7F:→ andrew43: 要用R去除BOM也不难,google R read utf-8 BOM资料很多 03/21 23:42
9F:→ andrew43: 来更新後会处理 03/21 23:46
10F:→ Wush978: 可以先用 readBin 读进来之後丢掉前三个 bytes, 然後用 03/22 09:57
11F:→ Wush978: connection 丢给 read.table 处理 03/22 09:57