RStudio не выбирает кодировку, которую я советую использовать при чтении файла
Я пытаюсь прочитать следующий файл в кодировке UTF-8 на R, но всякий раз, когда я его читаю, символы Юникода кодируются неправильно:
Сценарий, который я использую для обработки файла, выглядит следующим образом:
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 для чтения этого файла?
Я использую RStudio на OSX, если это имеет какое-либо значение.
4 ответа
Эта проблема вызвана неправильной настройкой локали, будь то внутри RStudio или командной строки R:
Если проблема возникает только в RStudio, а не в командной строке R, перейдите в RStudio-> Предпочтения: Общие, сообщите нам, на что установлена "Кодировка текста по умолчанию", нажмите "Изменить" и попробуйте Windows-1252, UTF-8 или ISO8859. -1 ("latin1") (или "Ask", если вы всегда хотите, чтобы вас приглашали). Скриншот прикреплен внизу. Дайте нам знать, какой из них работал!
Если проблема также возникает в командной строке R, выполните следующие действия:
Делать locale -m
на вашем Mac и скажите нам, поддерживает ли он 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
должен выяснить, совместима ли используемая им кодировка с локалью, и предупредить или выдать ошибку, если нет).
Дайте нам знать, какое исправление сработало! Я пытаюсь документировать это более широко, чтобы мы могли найти правильное улучшение.
- Снимок экрана настроек 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://docs.moodle.org/dev/Table_of_locales и только что попробовал Sys.setlocale(category = "LC_ALL", locale = "pt_PT.UTF-8")
и это работает.
Тебе стоит попробовать library(readr)
функции, такие как read_csv()
или же read_fwf()
(обратите внимание на подчеркивание вместо точки), он угадывает кодировку файла, обычно это удается; эти функции считывания входят в состав графического интерфейса RStudio "набор данных импорта"
Если ваша система Mac, откройте терминал, скопируйте этот код
defaults write org.R-project.R force.LANG en_US.UTF-8
вставить и запустить. Надеюсь это работает. У меня такая же проблема.