读取toad导出的csv文件后,将奇怪的字符添加到第一列名称

amu*_*gui 14 csv toad r

每当我读取使用toad导出的csvR(read.csv("file_name.csv"))中的文件时,第一列名称前面都有以下字符" ï.. ".此外,打开excel或notepad ++中的csv文件正确显示(没有前面的字符).这是一个麻烦,因为我的解决方法是在每次读取后重命名该列.感谢您解决此问题!

编辑:
通过右键单击查询的结果集并选择
"快速导出 - >文件 - > CSV文件",在Toad中创建导出

每条评论的更多细节:
head(readLines('test_file.csv'),n=3)
[1] "ID,LOCATION" "12021,1204" "12281,1204"

小智 22

试试这个:

d <- read.csv("test_file.csv", fileEncoding="UTF-8-BOM")
Run Code Online (Sandbox Code Playgroud)

这适用于R 3.0.0+并删除文件中存在的BOM(对于从Microsoft应用程序生成的文件很常见:Excel,SQL server)

  • 我意识到这是一个旧线程,但我只是想提一下这对我也有用。 (2认同)

小智 9

我知道这是一个非常古老的问题,但我找到的最简单的解决方案是使用 NotePad++。在 NotePad++ 中打开 CSV 文件,单击“编码”并选择“以 UTF-8 编码”并保存文件。它删除了 BOM,原始代码应该可以工作。


Sky*_*ach 5

我最近在使用剪贴板和 Microsoft Excel 时遇到了这个问题

随着用于数据科学的多语言内容不断增加,不再有一种安全的方法来假设 utf-8(在我的情况下,excel 假设 UTF-16,因为我的大部分数据都包含繁体中文(普通话?)。

根据Microsoft Docs,Windows 中使用了以下 BOM:

|----------------------|-------------|-----------------------|
| Encoding             | Bom         | Python encoding kwarg |
|----------------------|-------------|-----------------------|
| UTF-8                | EF BB BF    | 'utf-8'               |
| UTF-16 big-endian    | FE FF       | 'utf-16-be'           |
| UTF-16 little-endian | FF FE       | 'utf-16-le'           |
| UTF-32 big-endian    | 00 00 FE FF | 'utf-32-be'           |
| UTF-32 little-endian | FF FE 00 00 | 'utf-32-le'           |
|----------------------|-------------|-----------------------|
Run Code Online (Sandbox Code Playgroud)

我想出了以下方法,似乎可以很好地使用文件开头的字节顺序标记来检测编码:

|----------------------|-------------|-----------------------|
| Encoding             | Bom         | Python encoding kwarg |
|----------------------|-------------|-----------------------|
| UTF-8                | EF BB BF    | 'utf-8'               |
| UTF-16 big-endian    | FE FF       | 'utf-16-be'           |
| UTF-16 little-endian | FF FE       | 'utf-16-le'           |
| UTF-32 big-endian    | 00 00 FE FF | 'utf-32-be'           |
| UTF-32 little-endian | FF FE 00 00 | 'utf-32-le'           |
|----------------------|-------------|-----------------------|
Run Code Online (Sandbox Code Playgroud)

我意识到这需要打开文件进行两次读取(一次是二进制文件,一次是作为编码文本),但在这种特殊情况下,API 并没有真正让这样做变得容易。

无论如何,我认为这比简单地假设 utf-8 更健壮,而且显然自动编码检测不起作用,所以......