14

I saved an Excel table as text (*.txt). Unfortunately, Excel don't let me choose the encoding. So I need to open it in Notepad (which opens as ANSI) and save it as UTF-8. Then, when I read it in R:

data <- read.csv("my_file.txt",header=TRUE,sep="\t",encoding="UTF-8")

it shows the name of the first column beginning with "X.U.FEFF.". I know these are the bytes reserved to tell any program that the file is in UTF-8 format. So it shouldn't appear as text! Is this a bug? Or am I missing some option? Thanks in advance!

4

4 回答 4

16

因此,我将向您提供有关如何手动打开文件并检查和丢弃 BOM 的说明,但后来我注意到了这一点(在 中?file):

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

这意味着如果你有一个足够新的 R 解释器,

read.csv("my_file.txt", fileEncoding="UTF-8-BOM", ...other args...)

应该做你想做的。

于 2013-11-12T18:58:30.573 回答
4

中的大多数参数read.csv都是虚拟参数 - 包括fileEncoding.

read.table改为使用

 read.table("my_file.txt", header=TRUE, sep="\t", fileEncoding="UTF-8")
于 2013-11-12T18:17:14.167 回答
1

我在使用read.csv(with encoding="UTF-87-BOM")read.tableread_csvreadr包中加载 csv 文件时遇到了同样的问题。这些尝试都没有被证明是成功的。

我绝对不能使用 BOM 标签,因为在子设置我的数据时(使用两种方法subset()df[df$var=="value",]),第一行没有被考虑在内。

我终于找到了使 BOM 标签消失的解决方法。使用该read.csv函数,我刚刚在参数中为我的列名定义了一个字符串向量col.names = ...。这就像一个魅力,我可以毫无问题地对我的数据进行子集化。

我使用 R 版本 3.5.0

于 2018-08-06T10:34:59.840 回答
0

评论中可能的解决方案:

尝试使用 read.csv 参数check.names=FALSE。请注意,如果您使用它,您将无法使用该$符号直接引用列,除非您将名称括在引号中。例如:yourdf$"first col"

于 2013-11-12T18:46:58.510 回答