RStudio не выбирает кодировку, которую я говорю ей при чтении файла

Я пытаюсь читать следующий кодированный файл UTF-8 в R, но всякий раз, когда я его читаю, символы Unicode кодируются неправильно:

enter image description here

script Я использую для обработки файла следующее:

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, если это имеет значение.

Ответы

Ответ 1

Эта проблема вызвана неправильной установкой локали, будь то внутри RStudio или командной строки R:

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

  • Если проблема также возникает в командной строке R, выполните следующие действия:

Сделайте locale -m на вашем Mac и сообщите нам, поддерживает ли он CP1252 или ISO8859-1 ('latin1')? Если вам нужно, дайте список поддерживаемых локалей. (Вы можете также сказать нам свою версию MacOS, пока вы на ней.)

Для обоих этих локалей попробуйте изменить этот язык:

# first try Windows CP1252, although that 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 Изменение меню текстового кодирования по умолчанию: enter image description here

Ответ 2

Это отлично работает для меня.

Вы пытались изменить / reset locale?

в моем случае он работает с

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
...

Ответ 3

У меня была такая же проблема с португальским языком в r (MAC OS 10.12.3) Я пробовал в соответствии с потоком выше, и никто не работал. Затем я нашел эту веб-страницу: https://docs.moodle.org/dev/Table_of_locales и просто попробовал Sys.setlocale(category = "LC_ALL", locale = "pt_PT.UTF-8"), и он работает.

Ответ 4

Вам следует попробовать library(readr) функции, такие как read_csv() или read_fwf() (обратите внимание на подчеркивание вместо точки), он угадывает кодировку файла, как правило, это удается; эти функции readr входят в функцию RStudio GUI "import dataset"