web-dev-qa-db-fra.com

RStudio ne sélectionne pas l'encodage que je lui dis d'utiliser lors de la lecture d'un fichier

J'essaie de lire le fichier codé UTF-8 suivant dans R, mais chaque fois que je le lis, les caractères unicode ne sont pas codés correctement:

enter image description here

Le script que j'utilise pour traiter le fichier est le suivant:

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)
}

Je lis le fichier envoyé dans le codage UTF-8, supprime tous les guillemets (même les nombres sont cités, il faut donc les nettoyer), puis je passe le contenu à read.csv. Il lit et traite le fichier correctement, mais il semble que les informations d'encodage que je lui donne ne soient pas utilisées.

Que dois-je faire pour qu'il utilise UTF-8 pour lire ce fichier?

J'utilise RStudio sur OSX si cela fait une différence.

17
Maurício Linhares

Ce problème est dû au mauvais paramétrage de l'environnement local, que ce soit à l'intérieur de RStudio ou de la ligne de commande R:

  1. Si le problème ne se produit que dans RStudio pas sur la ligne de commande R, accédez à RStudio-> Préférences: Général, indiquez-nous le paramètre "Codage de texte par défaut:", cliquez sur "Modifier" et essayez Windows-1252, UTF. -8 ou ISO8859-1 ('latin1') (ou 'Demander' si vous voulez toujours être invité). Capture d'écran en bas. Faites-nous savoir lequel a fonctionné! 

  2. Si le problème se produit également dans la ligne de commande R , procédez comme suit:

Faites locale -m sur votre Mac et dites-nous s'il prend en charge le CP1252 ou bien la norme ISO8859-1 ('latin1')? Videz la liste des paramètres régionaux pris en charge si vous en avez besoin. (Vous pourriez aussi bien nous dire votre version de MacOS pendant que vous y êtes.)

Pour ces deux paramètres régionaux, essayez de modifier ce paramètre:

# 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")

Cela devrait fonctionner . Strictement, la commande Sys.setlocale() devrait figurer dans votre ~/.Rprofile pour le démarrage, pas dans votre session R ou code source . Cependant, Sys.setlocale() peut échouer, soyez donc conscient de cela. En outre, assertez Sys.getlocale() dans votre code d'installation tôt et souvent, comme je le fais. (En réalité, read.csv devrait déterminer si le codage utilisé est compatible avec les paramètres régionaux et avertir ou commettre une erreur dans le cas contraire).

Faites-nous savoir quel correctif a fonctionné! J'essaie de documenter ceci de manière plus générale afin que nous puissions trouver le bon renforcement.

  1. Capture d'écran des préférences de RStudio Modifier le menu de codage de texte par défaut: enter image description here
14
smci

Ça fonctionne bien pour moi.

Avez-vous essayé de changer/réinitialiser les paramètres régionaux?

dans mon cas ça marche avec 

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
Paulo E. Cardoso

J'ai eu le même problème avec les paramètres régionaux portugais dans r (MAC OS 10.12.3) J'ai essayé comme par le fil ci-dessus et personne n'a fonctionné. Ensuite, j'ai trouvé cette page Web: https://docs.moodle.org/dev/Table_of_locales Et juste essayé Sys.setlocale(category = "LC_ALL", locale = "pt_PT.UTF-8") et cela fonctionne. 

2
Jesús Bescos

Vous devriez essayer les fonctions library(readr), telles que read_csv() ou read_fwf() (notez le trait de soulignement au lieu du point). ces fonctions de lecture sont regroupées dans la fonction "import dataset" de l'interface graphique RStudio

0
Elio Diaz