每当我读取使用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)
小智 9
我知道这是一个非常古老的问题,但我找到的最简单的解决方案是使用 NotePad++。在 NotePad++ 中打开 CSV 文件,单击“编码”并选择“以 UTF-8 编码”并保存文件。它删除了 BOM,原始代码应该可以工作。
我最近在使用剪贴板和 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 更健壮,而且显然自动编码检测不起作用,所以......
| 归档时间: |
|
| 查看次数: |
18204 次 |
| 最近记录: |