使用 BOM 读取 UTF-8 文本文件
Posted
技术标签:
【中文标题】使用 BOM 读取 UTF-8 文本文件【英文标题】:Read a UTF-8 text file with BOM 【发布时间】:2014-03-04 16:34:27 【问题描述】:我有一个开头带有字节顺序标记 (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] ""
【问题讨论】:
【参考方案1】:你试过read.csv(..., fileEncoding = "UTF-8-BOM")
吗? ?file
说:
从 R 3.0.0 开始,编码“UTF-8-BOM”被接受并将删除 字节顺序标记(如果存在)(通常用于文件和网页 由 Microsoft 应用程序生成)。
【讨论】:
也不适合我。当从记事本++复制粘贴时,我的原始数据看起来像“31.1”,但在带有 fread 的 R 中它分成 2 列,并且使用 read.csv 我得到以下前缀“”(使用 as.is = TRUE)。我使用 autohotkey 和 convert2txt 从 gui 显示中获取 ocr,并将其写入文件。这给了我“31.2”变成“.331”的问题【参考方案2】:这是在版本 1.9.6 和 1.9.8 之间使用this commit 处理的;更新您的 data.table
安装以解决此问题。
完成后,您可以使用fread
:
fread("file_name.csv")
【讨论】:
我使用的是 1.10.4。我最终使用“read_csv”并设置“col_types = “c””,然后在转换为数字之前修剪第一个字符。这是一个杂牌。以上是关于使用 BOM 读取 UTF-8 文本文件的主要内容,如果未能解决你的问题,请参考以下文章