我有一个包含元音变音 (Ä/Ö) 的大型 csv 文件,我需要将其转换为 RSQLite 数据库,以便使用 dplyr 进行部分分析。但是,当我从数据库中读取数据时,变音符号无法正确再现。变成 <c4>
和 Ö 变为 <d6>
。 read.csv
正确地再现变音符号。
# Create test data
indata<-data.frame(var=c('Ä', 'Ö', 'ä', 'ö', 'ÄÄ_öö'))
write.table(indata, 'test.csv', sep=';', row.names = F, quote=F)
library(DBI)
library(RSQLite)
library(dplyr)
db <- dbConnect(RSQLite::SQLite(), dbname="test") # Create empty database
RSQLite::dbWriteTable(conn = db, name = "testData", # Save csv into database
value = "test.csv",
row.names = FALSE, header = T, sep=';',
colClasses='character')
dbDisconnect(db)
con<-src_sqlite(path='test', create=F)
outdata<-collect(tbl(con, 'testData'))
outdata2<-read.csv('test.csv')
outdata # mangled umlauts
outdata2 # correct umlauts
如何让 RSQLite 保留变音符号?
> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=Finnish_Finland.1252 LC_CTYPE=Finnish_Finland.1252
[3] LC_MONETARY=Finnish_Finland.1252 LC_NUMERIC=C
[5] LC_TIME=Finnish_Finland.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.5.0 RSQLite_1.1-2 DBI_0.5-1
loaded via a namespace (and not attached):
[1] magrittr_1.5 R6_2.2.0 assertthat_0.1 tools_3.3.2 tibble_1.2 memoise_1.0.0
[7] Rcpp_0.12.9 digest_0.6.12
最佳答案
您拥有的大文件可能采用 Latin-1 编码,但需要采用 UTF-8 编码才能通过 RSQLite 的 CSV 导入正确处理。调整您的示例以使用 write.table(..., fileEncoding = "UTF-8")
进行双重检查。 (请注意,Windows 默认情况下没有 UTF-8 编码,大多数其他操作系统(例如 Linux 和 OS X)通常都有,因此您给出的示例可以在 Linux 和 OS X 上运行。)
使用 iconv
或 recode
更改文件的编码:
iconv -f latin1 in.csv > out.csv # creates new file
recode latin1..utf-8 file.csv # in-place recoding
关于r - 从包含变音符号的 csv 创建 RSQLite - 然后使用 dplyr 读入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44178918/