R语言跨Windows与Linux平台保存数据的编码可移植性问询
跨Windows/Linux保留编码的R对象可移植保存方案
嘿,这个问题我之前也碰到过!直接用默认save()存的.rda跨系统读确实容易乱码——毕竟Windows和Linux的默认字符编码大多不一样(Windows常用GBK,Linux基本都是UTF-8),save()默认会跟着当前系统编码走。不过别担心,有几种靠谱的方法能解决这个问题:
方法1:保存时强制指定UTF-8编码
在Windows那边存对象的时候,给save()加个encoding="UTF-8"参数,把字符串都按UTF-8存:
# Windows机器上执行 df <- data.frame(Õ = 1:5, Ä = c("õäöü", "baa", "mää", "muu", "näu")) save(df, file="baa.rda", encoding="UTF-8")
到Linux这边读的时候,同样指定UTF-8编码加载就行:
# Linux机器上执行 load("baa.rda", encoding="UTF-8") # 可以验证下编码是否正确 Encoding(df$Ä)
这样像õ、ä这类特殊字符就能在两边都正常显示了。
方法2:用saveRDS()/readRDS()替代
如果只存单个对象,saveRDS()比save()更适合跨场景,同样支持encoding参数,而且不会有多个对象混存的编码问题:
# Windows保存 saveRDS(df, file="baa.rds", encoding="UTF-8") # Linux读取 df <- readRDS("baa.rds", encoding="UTF-8")
方法3:用CSV这类文本格式兜底
要是不需要保存R对象的完整结构(比如因子、属性这些),用CSV存并指定UTF-8编码是最通用的——不仅跨R的系统,其他语言也能读:
# Windows保存 write.csv(df, file="baa.csv", fileEncoding="UTF-8", row.names=FALSE) # Linux读取 df <- read.csv("baa.csv", fileEncoding="UTF-8")
如果你已经存了默认的.rda文件怎么办?
要是你已经用默认方式在Windows存了文件,现在要在Linux读,可以试着手动转编码:
# Linux上先按Windows的默认编码(比如GBK)加载 load("baa.rda", encoding="GBK") # 再转成UTF-8 df$Ä <- iconv(df$Ä, from="GBK", to="UTF-8") # 检查下是否正常 Encoding(df$Ä)
不过这个方法得你大概知道Windows当时的默认编码,要是不确定,也可以试试"CP1252"这类常见的Windows编码。
内容的提问来源于stack exchange,提问作者lebatsnok
相关产品推荐
相关产品推荐

