darkknight 嗯,R4.2.0改成了UTF8默认编码,而data.table::fread()
不支持重编码…如果不考虑效率倒是可以自己按下面转一下…
方法1,效率高点
reencode_dt = function(dt, dt_enc = "CP936") {
reencode = \(v) iconv(v, dt_enc, "UTF-8")
data.table::setnames(dt, reencode)
cols = names(dt)[dt |> vapply(is.character, FUN.VALUE = logical(1L))]
if (length(cols)) {
dt[, c(cols) := lapply(.SD, reencode), .SDcols = c(cols)]
}
invisible(dt[])
}
x = r"{your file path}" |> data.table::fread() |> reencode_dt()
x
方法2,低效点,但简单
r"{your-csv-path}" |>
readLines(encoding = "CP936") |>
iconv("CP936", "UTF-8") |>
data.table::fread(text = _)