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:

  1. Если проблема возникает только в RStudio, а не в командной строке R, перейдите в RStudio-> Предпочтения: Общие, сообщите нам, на что установлена ​​"Кодировка текста по умолчанию", нажмите "Изменить" и попробуйте Windows-1252, UTF-8 или ISO8859. -1 ("latin1") (или "Ask", если вы всегда хотите, чтобы вас приглашали). Скриншот прикреплен внизу. Дайте нам знать, какой из них работал!

  2. Если проблема также возникает в командной строке 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 должен выяснить, совместима ли используемая им кодировка с локалью, и предупредить или выдать ошибку, если нет).

Дайте нам знать, какое исправление сработало! Я пытаюсь документировать это более широко, чтобы мы могли найти правильное улучшение.

  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://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

вставить и запустить. Надеюсь это работает. У меня такая же проблема.

Другие вопросы по тегам