RStudio не выбирает кодировку, которую я говорю ей при чтении файла
Я пытаюсь прочитать следующий кодированный файл UTF-8 в R, но всякий раз, когда я его читаю, символы юникода не кодируются правильно:
Сценарий, который я использую для обработки файла, выглядит следующим образом:
- Как изменить кодировку по умолчанию в NetBeans 8.0
- Пусть объект JSON принимает байты или позволяет выводить строки вывода
- Microsoft Excel управляет диакритикой в CSV-файлах?
- Что такое кодировка символов и почему я должен ее беспокоить?
- Excel в CSV с кодировкой UTF8
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, если это имеет значение.
- URL-код, кодирующий символ пробела: + или% 20?
- В чем разница между кодировкой и кодировкой?
- Избавьтесь от уродливых утверждений
- Почему значения cookie с пробелом поступают на стороне клиента с кавычками?
- Как отправлять и получать сообщения WebSocket на стороне сервера?
- Ошибка получения родительского элемента: не найден ресурс, который соответствует указанному имени '@android: style / TextAppearance.Holo.Widget.ActionBar.Title'
- Заголовок Content-Length по сравнению с закодированным кодированием
- Код C ++ в файлах заголовков
Эта проблема вызвана неправильным набором локалей, будь то внутри 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'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
должен выяснить, совместима ли кодировка с локалью, а также предупреждать или ошибочно, если нет).
Сообщите нам, какое исправление работает! Я пытаюсь документировать это в более общем плане, чтобы мы могли найти правильное улучшение.
- Снимок экрана с настройками 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”