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

如何在R中读取含正确与错误重音字符的下载.csv文件?

解决CSV混合编码导致的重音字符显示错误问题

这种情况属于混合编码污染:文件里同时存在两种编码的字符——一部分是标准UTF-8编码(比如正常的"Veríssimo"),另一部分是UTF-8字符被错误以ISO-8859-1(Latin-1)解码后写入的结果(比如"VirgÃ-nia"实际对应正确的"Virgínia")。以下是两种针对性的R语言解决方案:

方案1:优先保留UTF-8正确字符,修复错误转码的字符

如果文件中大部分正确字符是UTF-8格式,用这个方法:

library(readr)
library(stringi)
library(dplyr)

# 第一步:以UTF-8编码读取整个文件
dados_MG <- read_csv("dados_MG.csv", locale = locale(encoding = "UTF-8"))

# 定义修复函数:把错误显示的字符串转成字节,再用UTF-8重新解码
fix_wrong_encoding <- function(text) {
  if (is.character(text)) {
    stri_encode(stri_enc_toutf8(text, is_unknown = "passthrough"), 
                from = "ISO-8859-1", to = "UTF-8")
  } else {
    text
  }
}

# 对所有字符列应用修复
dados_MG_fixed <- dados_MG %>% 
  mutate(across(where(is.character), fix_wrong_encoding))

方案2:优先保留ISO-8859-1正确字符,修复UTF-8乱码

如果文件中大部分正确字符是ISO-8859-1格式,用这个方法:

library(readr)
library(stringi)
library(dplyr)

# 第一步:以ISO-8859-1编码读取整个文件
dados_MG <- read_csv("dados_MG.csv", locale = locale(encoding = "ISO-8859-1"))

# 定义修复函数:把UTF-8乱码的字符串转成字节,再用ISO-8859-1重新解码
fix_utf8_garbage <- function(text) {
  if (is.character(text)) {
    stri_encode(stri_enc_toutf8(text, is_unknown = "passthrough"), 
                from = "UTF-8", to = "ISO-8859-1")
  } else {
    text
  }
}

# 对所有字符列应用修复
dados_MG_fixed <- dados_MG %>% 
  mutate(across(where(is.character), fix_utf8_garbage))

补充说明

  • 如果只有个别列出现编码问题,可以把across(where(is.character))替换成具体列名(比如across(c(nome_coluna1, nome_coluna2))),避免影响其他正确的字符。
  • 可以先预览几行数据,判断哪种编码的正确字符更多,再选择对应的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:35:10