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"