R语言读取CSV文件出现特殊字符乱码问题求助
解决R中CSV加载乱码与特殊字符导出问题
这问题我之前帮同事排查过类似的,核心就是编码不匹配在搞鬼!咱们一步步来搞定它:
1. 先搞定加载时的乱码
你用了encoding="UTF-8"但还是出现乱码,大概率是你的原CSV文件根本不是UTF-8编码的。那些奇怪的字符(比如?ó?é¼?äót)其实是Windows常用编码(比如Windows-1252或ISO-8859-1)下的特殊字符,被强制用UTF-8解析后产生的乱码。
快速确认原文件编码
打开Notepad++,看窗口右下角的编码标识(比如显示「Windows-1252」),这就是你原文件的实际编码。
修改加载代码匹配编码
把read.csv的encoding参数改成原文件的编码,比如原文件是Windows-1252的话:
df <- read.csv("text.csv", encoding="Windows-1252", header=TRUE, stringsAsFactors=FALSE) # 验证一下:输出第一行文本看看是否正常 cat(df[1, 1])
如果原文件是带BOM的UTF-8(Windows下保存UTF-8时常会加BOM),那就用fileEncoding="UTF-8-BOM"来加载:
df <- read.csv("text.csv", fileEncoding="UTF-8-BOM", header=TRUE, stringsAsFactors=FALSE)
2. R当然能正确导出撇号等特殊字符!
只要你加载时把编码处理正确了,导出时指定UTF-8编码,撇号、表情符号(😁)这些特殊字符都能完美保存。
导出示例代码
# 导出时指定fileEncoding为UTF-8,避免乱码 write.csv(df, "fixed_text.csv", fileEncoding="UTF-8", row.names=FALSE)
导出后用Notepad++打开,就能看到和你期望的效果完全一致的文本了:
Because I don't want Jes's in the Family others that wasn't resolved and told Am really happy with the this 😁 new 'unbreakable' on the freeway….
关键总结
- 加载时必须匹配原文件的实际编码,而不是盲目用UTF-8;
- 导出时指定
fileEncoding="UTF-8",确保特殊字符被正确编码; - 表情符号这类Unicode字符,只要全程用UTF-8处理,R完全能支持。
内容的提问来源于stack exchange,提问作者CHONG
相关产品推荐
相关产品推荐

