【问题标题】:encode special characters in R在 R 中编码特殊字符
【发布时间】:2026-02-17 19:25:01
【问题描述】:

我的数据集包含很多姓氏。这些姓氏由变音符号和其他特殊字符(如 č、á、ñ 等)组成。

通过以下方式读取数据(使用 encoding = "latin1"),我设法以正确的方式显示变音符号:

read_data <- function(directory,debug=FALSE){
  file_list = list.files(path = directory,
                       pattern = "*.csv",
                       full.names = TRUE);

  df_read = data.frame();

  for (filename in file_list){
    df_temp = read_delim(filename,
                      delim=';',
                      locale = locale(encoding = "latin1"));

    if(debug){
      print(paste0(c(filename, " : ", dim(df_temp))));  
    }

    df_read = rbind(df_read, df_temp);

  }

  names(df_read) = make.names(names(df_read))

  return(df_read)
}

很遗憾,我无法正确显示其他特殊字符。是否可以使用另一种编码样式或另一种方式来读取包含所有特殊字符的 csv 文件?

【问题讨论】:

  • 你为什么不用encoding = "UTF-8"
  • 你需要知道数据的原始编码
  • display the other special characters in a proper way 到底是什么意思?你如何展示它们?如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。您确定数据是以 latin1 编码存储的吗?数据从何而来?
  • @phiver 因为那样我又失去了变音符号。
  • @Bruno:我将 excel 文件转换为(逗号分隔的)csv 文件。如果我选择编码“UTF-8”,则变音符号和其他特殊字符都显示为“?”或空的白盒子。当我选择编码“latin1”时,只会以这种方式显示其他特殊字符。我读到来自 excel 文件的 csv 是用 latin1 编码的,但这并不能帮助我解决我的问题。

标签: r encoding read.csv


【解决方案1】:

同时,我尝试了很多不同的方法来解决我的编码问题。到目前为止,我能得到的最好的结果是使用以下读入函数:

read_data <- function(directory,debug=FALSE){
  file_list = list.files(path = directory,
                       pattern = "*.csv",
                       full.names = TRUE);

  df_read = data.frame();

  for (filename in file_list){
    df_temp = read.csv(filename,encoding="UTF-16LE", sep=";", header=TRUE);

    if(debug){
      print(paste0(c(filename, " : ", dim(df_temp))));  
    }

    df_read = rbind(df_read, df_temp);

  }

  names(df_read) = make.names(names(df_read))

  return(df_read)
}

仍有一个特殊字符显示为“?”,但其余问题可以通过使用“read.csv”而不是“read_delim”和使用编码“UTF-16LE”来解决

【讨论】: