![](/img/trans.png)
[英]Why is RStudio telling me that my file doesn't exist? I'm looking directly at it
[英]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 中:
如果问题仅发生在 RStudio而不是命令行 R,请转到 RStudio->首选项:常规,告诉我们“默认文本编码:”设置为什么,单击“更改”并尝试 Windows-1252、UTF-8 或 ISO8859 -1('latin1') (或者如果你总是想得到提示,则“询问”)。 截图附在底部。 让我们知道哪个有效!
如果问题也出现在命令行 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
应该确定它使用的编码是否与语言环境兼容,如果不兼容则发出警告或错误)。
让我们知道哪个修复有效! 我试图更一般地记录这一点,以便我们可以找出正确的增强。
这对我来说可以。
您是否尝试更改/重置语言环境?
就我而言,它适用于
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.