You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下read_csv_arrow处理扩展拉丁字符遇阻求助

解决R中arrow包读取含特殊字符CSV的编码问题

问题背景

Windows系统下有如下CSV文件:

name, age
Siân, 34
Brónagh, 45
François, 87
Alan, 23
,

使用arrow包读取:

library(arrow)
df <- read_csv_arrow("people.csv")

文件加载成功,但name列被识别为arrow_binary类型,尝试转换时遇到多个问题:

  • 直接执行as.character(df$name)报错:Can't convert x <arrow_binary> to <character>.
  • 调用arrow::cast提示函数不存在:! 'cast' is not an exported object from 'namespace:arrow'
  • 读取时指定col_types = schema(name = arrow::string())报错:! Invalid: In CSV column #1: Row #1: CSV conversion error to string: invalid UTF8 data
  • 期望用UTF-16编码读取,但不确定arrow是否支持该类型。

解决方案

1. 读取阶段指定正确编码(优先方案)

Windows下的CSV文件常使用GBK/GB2312或UTF-16 LE编码,而非默认的UTF-8。读取时直接指定文件编码,让arrow正确识别字符串:

情况1:文件为GBK/GB2312编码

df <- read_csv_arrow("people.csv", encoding = "GBK")

情况2:文件为UTF-16 LE编码

arrow支持UTF-16编码,需明确指定编码类型:

df <- read_csv_arrow("people.csv", encoding = "UTF-16LE")

指定编码后,name列会直接被识别为string类型,无需后续转换。

2. 已读取为arrow_binary类型的转换方案

如果已经将列读成了arrow_binary,可以通过rawToChar逐个转换raw向量为字符:

# 用purrr处理列表型的arrow_binary列
library(purrr)
df$name <- map_chr(df$name, function(x) if(is.null(x)) NA else rawToChar(x))

# 或用base R的sapply实现
df$name <- sapply(df$name, function(x) if(is.null(x)) NA_character_ else rawToChar(x))

3. 解决arrow::cast找不到的问题

arrow::cast是较新版本arrow包才导出的函数,若提示不存在,先升级arrow包:

install.packages("arrow")
# 或从GitHub安装最新开发版
# remotes::install_github("apache/arrow/r")

升级后即可使用cast函数转换类型:

library(dplyr)
df <- df %>% mutate(name = arrow::cast(name, arrow::string()))

内容的提问来源于stack exchange,提问作者pluke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:30:20