繁体   English   中英

RStudio 没有选择我告诉它在读取文件时使用的编码

[英]RStudio not picking the encoding I'm telling it to use when reading a file

我正在尝试在 R 中读取以下 UTF-8 编码文件,但是每当我读取它时,unicode 字符都没有正确编码:

在此处输入图片说明

我用来处理文件的脚本如下:

defaultEncoding <- "UTF8"
detalheVotacaoMunicipioZonaTypes <- c("character", "character", "factor", "factor", "factor", "factor", "factor",
                                                     "factor", "factor", "factor", "factor", "factor", "numeric", 
                                                     "numeric", "numeric", "numeric", "numeric", "numeric",
                                                     "numeric", "numeric", "numeric", "numeric", "numeric", 
                                                     "numeric", "character", "character")

readDetalheVotacaoMunicipioZona <- function( fileName ) {
  fileConnection = file(fileName,encoding=defaultEncoding)
  contents <- readChar(fileConnection, file.info(fileName)$size)  
  close(fileConnection)
  contents <- gsub('"', "", contents)

  columnNames <- c("data_geracao", "hora_geracao", "ano_eleicao", "num_turno", "descricao_eleicao", "sigla_uf", "sigla_ue",
                   "codigo_municipio", "nome_municipio", "numero_zona", "codigo_cargo", "descricao_cargo", "qtd_aptos", 
                   "qtd_secoes", "qtd_secoes_agregadas", "qtd_aptos_tot", "qtd_secoes_tot", "qtd_comparecimento",
                   "qtd_abstencoes", "qtd_votos_nominais", "qtd_votos_brancos", "qtd_votos_nulos", "qtd_votos_legenda", 
                   "qtd_votos_anulados", "data_ult_totalizacao", "hora_ult_totalizacao")

  read.csv(text=contents, 
           colClasses=detalheVotacaoMunicipioZonaTypes,
           sep=";", 
           col.names=columnNames, 
           fileEncoding=defaultEncoding,
           header=FALSE)
}

我阅读了以 UTF-8 编码发送的文件,删除所有引号(偶数被引用,所以我需要清理它们),然后将内容提供给read.csv 它正确读取和处理文件,但似乎没有使用我提供的编码信息。

我应该怎么做才能让它使用 UTF-8 来读取这个文件?

如果有任何不同,我在 OSX 上使用 RStudio。

此问题是由设置错误的语言环境引起的,无论是在 RStudio 内还是在命令行 R 中:

  1. 如果问题仅发生在 RStudio而不是命令行 R,请转到 RStudio->首选项:常规,告诉我们“默认文本编码:”设置为什么,单击“更改”并尝试 Windows-1252、UTF-8 或 ISO8859 -1('latin1') (或者如果你总是想得到提示,则“询问”)。 截图附在底部。 让我们知道哪个有效!

  2. 如果问题也出现在命令行 R 中,请执行以下操作:

在 Mac 上执行locale -m并告诉我们它是否支持 CP1252 或 ISO8859-1 ('latin1')? 如果需要,转储支持的语言环境列表。 (您不妨在使用时告诉我们您的 MacOS 版本。)

对于这两个语言环境,请尝试更改为该语言环境:

# first try Windows CP1252, although that's almost surely not supported on Mac:
Sys.setlocale("LC_ALL", "pt_PT.1252") # Make sure not to omit the `"LC_ALL",` first argument, it will fail.
Sys.setlocale("LC_ALL", "pt_PT.CP1252") # the name might need to be 'CP1252'

# next try IS08859-1(/'latin1'), this works for me:
Sys.setlocale("LC_ALL", "pt_PT.ISO8859-1")

# Try "pt_PT.UTF-8" too...

# in your program, make sure the Sys.setlocale worked, sprinkle this assertion in your code before attempting to read.csv:
stopifnot(Sys.getlocale('LC_CTYPE') == "pt_PT.ISO8859-1")

那应该工作。 严格来说Sys.setlocale()命令应该在你的~/.Rprofile进行启动,而不是在你的 R 会话或源代码中。 然而Sys.setlocale()可能会失败,所以请注意这一点。 此外,像我一样,尽早并经常在设置代码中声明Sys.getlocale() (实际上, read.csv应该确定它使用的编码是否与语言环境兼容,如果不兼容则发出警告或错误)。

让我们知道哪个修复有效! 我试图更一般地记录这一点,以便我们可以找出正确的增强。

  1. RStudio 首选项更改默认文本编码菜单的屏幕截图:在此处输入图片说明

这对我来说可以。

您是否尝试更改/重置语言环境?

就我而言,它适用于

Sys.setlocale(category = "LC_ALL", locale = "Portuguese_Portugal.1252")

d <- read.table(text=readClipboard(), header=TRUE, sep = ';')

head(d)

1  25/04/2014  22:29:30  2012  1 ELEIÇÃO MUNICIPAL 2012 PB  20419    20419      ITAPORANGA  33  13 VEREADOR 17157
2  25/04/2014  22:29:30  2012  1 ELEIÇÃO MUNICIPAL 2012 PB  20770    20770           MALTA  51  11 PREFEITO  4677
3  25/04/2014  22:29:30  2012  1 ELEIÇÃO MUNICIPAL 2012 PB  21091    21091     OLHO D'ÁGUA  32  13 VEREADOR  6653
4  25/04/2014  22:29:30  2012  1 ELEIÇÃO MUNICIPAL 2012 PB  21113    21113        OLIVEDOS  23  13 VEREADOR  3243
...

我在 r (MAC OS 10.12.3) 中遇到了与葡萄牙语语言环境相同的问题,我已经按照上面的线程进行了尝试,但没有人工作。 然后我找到了这个网页: https : Sys.setlocale(category = "LC_ALL", locale = "pt_PT.UTF-8")并尝试了Sys.setlocale(category = "LC_ALL", locale = "pt_PT.UTF-8")并且它有效。

您应该尝试使用library(readr)函数,例如read_csv()read_fwf() (注意下划线而不是点),它会猜测文件的编码,通常会成功这样做; 这些读取器功能捆绑在 RStudio GUI 功能“导入数据集”中

如果你的系统是Mac,打开终端,复制这段代码

defaults write org.R-project.R force.LANG en_US.UTF-8

粘贴并运行。 我希望它有效。 我有同样的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM