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

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

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

  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.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). Я пробовал в соответствии с streamом выше, и никто не работал. Затем я нашел эту веб-страницу: https://docs.moodle.org/dev/Table_of_locales и попробовал Sys.setlocale(category = "LC_ALL", locale = "pt_PT.UTF-8") и он работает.

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

  • Какую кодировку использует Microsoft Excel при сохранении файлов?
  • Как закодировать WAV в mp3 на устройстве Android
  • Файлы заголовков C ++, разделение кода
  • Как создать элементарный stream AAC ADTS с Android MediaCodec
  • Покрытие кода, не показывающее результаты с помощью Xcode + gcov
  • Какова правильная кодировка HTTP-запросов?
  • Кодирование / декодирование массивов типов, соответствующих протоколу с JSONEncoder
  • Как определить кодировку файлов в OSX?
  • Java: как определить правильную кодировку кодировки streamа
  • #ifdef vs #if - что лучше / безопаснее как способ включения / отключения компиляции определенных разделов кода?
  • андроид динамически меняет стиль во время выполнения
  • Давайте будем гением компьютера.