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

djh*_*rio 15 unicode byte-order-mark r utf-8 character-encoding

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

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

> names(frame_pers)[1]
[1] "?Ⱦreg_date"
Run Code Online (Sandbox Code Playgroud)

同样是与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"
Run Code Online (Sandbox Code Playgroud)

我正在使用R会话的本机编码:

> options("encoding" = "")
> options("encoding")
$encoding
[1] ""
Run Code Online (Sandbox Code Playgroud)

had*_*ley 26

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

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

  • 也不为我工作。当从记事本++复制粘贴时,我的原始数据看起来像“31.1”,但在带有fread的R中,它分成两列,而使用read.csv,我得到以下作为前缀“”(使用as.is = TRUE)。我使用 autohotkey 和 Convert2txt 从 gui 显示中获取 ocr,并将其写入文件。这给我带来了“31.2”变成“.331”的问题 (2认同)

Mic*_*ico 5

这是在版本1.9.6和1.9.8之间使用此提交处理的 ; 更新您的data.table安装以解决此问题.

完成后,您可以使用fread:

fread("file_name.csv")
Run Code Online (Sandbox Code Playgroud)

  • @EngrStudent请在data.tablr问题跟踪器上报告,如果可以的话,包括原始文件,因为问题应该修复.另外请事先尝试使用开发版本(1.10.5),我似乎记得最近有关BOM的更新. (2认同)