使用BOM读取UTF-8文本文件

时间:2014-02-07 10:09:06

标签: r unicode utf-8 character-encoding byte-order-mark

我在开头有一个带字节顺序标记(U + FEFF)的文本文件。我正在尝试读取R中的文件。是否可以避免字节顺序标记?

函数fread(来自data.table包)读取文件,但在第一个变量名的开头添加ļ»æ

> 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] ""

2 个答案:

答案 0 :(得分:26)

你试过read.csv(..., fileEncoding = "UTF-8-BOM")吗? ?file说:

  

从R 3.0.0起,编码'“UTF-8-BOM”'被接受并将被删除   字节顺序标记(如果存在)(通常用于文件和网页)   由Microsoft应用程序生成)。

答案 1 :(得分:5)

这是在版本1.9.6和1.9.8与this commit之间处理的;更新您的data.table安装以解决此问题。

完成后,您只需使用fread

fread("file_name.csv")