R保存含中文字符的data.frame为CSV出现乱码,如何解决?
解决R保存含中文字符CSV的乱码问题
核心原因
你的系统区域设置为英文(1252编码),R默认使用native.enc保存文件,导致中文字符被转义为Unicode码点(如<U+8001><U+738B>)。
解决方案
方法1:指定UTF-8-BOM编码保存(推荐,无需改系统)
在write.csv中添加fileEncoding = "UTF-8-BOM"参数,Windows下Excel能直接识别带BOM的UTF-8文件:
df = data.frame(name = c('老王')) write.csv(df, 'C:/temp/test_chinese_characters.csv', row.names = FALSE, fileEncoding = "UTF-8-BOM")
如果用纯文本编辑器打开,也可以用fileEncoding = "UTF-8",但Excel可能需要手动选择UTF-8编码才能正常显示。
方法2:修改系统区域设置(永久生效)
适合长期处理中文数据的场景:
- 打开Windows设置 → 时间和语言 → 语言和区域 → 「管理语言设置」
- 选择「更改系统区域设置」,勾选「Beta版:使用Unicode UTF-8提供全球语言支持」,或直接选择「中文(简体,中国)」
- 重启电脑后,R的区域编码会自动适配,默认保存即可正确处理中文。
方法3:使用tidyverse的readr包保存
readr包的write_csv函数默认采用UTF-8编码,无需额外配置:
# 首次使用先安装包 install.packages("readr") library(readr) df = data.frame(name = c('老王')) write_csv(df, 'C:/temp/test_chinese_characters.csv')
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

