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

R语言修改CSV列名时出现Â字符乱码的问题及解决方法

乱码原因&解决办法

为啥会出现Â这种乱码?

T2 [°C]是编码不兼容搞出来的问题:

  • °在UTF-8编码里是占2个字节的字符,如果读取或保存文件时编码不统一(比如原文件是单字节的Latin-1编码,却用UTF-8读取;或者修改列名后用非UTF-8编码保存),这个多字节字符会被拆成单个字节错误解析,Â就是拆分后错读出来的结果。
  • 原文件列名里的?本身也是编码错误的产物:原文件中的°因为编码不匹配,被读取成了无效字符?,后续修改列名时又叠加了编码转换错误,最终就出现了带Â的乱码。

怎么改成正确的T2 [°C]?

1. 读取文件时指定正确编码

原文件的编码大概率不是UTF-8,在fread里加上对应编码参数(先试试Latin-1,不行再换UTF-8),确保原列名被正确解析:

read_the_files <- function(filelist){
  lapply(filelist, function(file) {
    # 先尝试用Latin-1编码读取,不对就换成UTF-8
    fread(file, skip = "Date/Time	XY [XY]", encoding = "Latin-1")
  })
}

2. 修改列名时保证编码统一

如果读取后列名还是T2 [?C],直接匹配这个列名,同时把新列名转成UTF-8编码再替换:

adj_col_nam <- function(dt_list){
 lapply(dt_list, FUN = function(x){
   # 把新列名转成UTF-8编码,避免转换错误
   new_col_name <- enc2utf8("T2 [°C]")
   setnames(x, old = "T2 [?C]", new = new_col_name, skip_absent = TRUE)
   return(x)
  })
}

3. 保存文件时强制用UTF-8编码

处理完的数据保存时,一定要指定UTF-8编码,防止再次出现乱码:

# 示例:将处理好的文件逐个保存为新文件
processed_data <- adj_col_nam(read_the_files(dirlist))
lapply(seq_along(processed_data), function(i){
  fwrite(processed_data[[i]], file = paste0("processed_", dirlist[i]), encoding = "UTF-8")
})

额外小技巧:先确认原文件编码

不确定原文件编码的话,可以先读取几行查看编码类型:

# 读取第一个文件的前5行,查看编码
first_few_lines <- readLines(dirlist[1], n = 5)
Encoding(first_few_lines)

根据输出的编码类型,调整fread里的encoding参数即可。

内容的提问来源于stack exchange,提问作者Alexia k Boston

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:23:16