IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

probleme encodage sur une base oracle


Sujet :

R

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut probleme encodage sur une base oracle
    Bonjour,

    Je travaille sur MobaXterm qui me permet d'accéder à un serveur R sur linux. Mon poste est sous windows.
    Je réalise des requêtes sur une base oracle pour créer des rapports... et évidemment j'ai des problèmes d'encodage.

    J'ai essayé de mettre les données en utf8 dès la connexion ora <- dbDriver("Oracle",unicode_as_utf8 = TRUE), avec encoding sur la variable que je récupère mais rien n'y change, je n'ai toujours pas d'accent et mes apostrophes apparaisent avec le ?..

    Et donc je me tourne vers vous.. :-) Si quelqu'un a déjà rencontré ce problème et a une solution, ce serait cool.

    Merci d'avance.

  2. #2
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Bonjour,
    D'emblée, je signale mon incapacité d'essayer de reproduire quoi que ce soit, n'ayant pas accès à un serveur Oracle.
    Mais en survolant les manuels des paquets DBI et Oracle, il semble que le souci ne viendrait pas de R, il faudrait plutôt regarder du côté du SGBD et des différents systèmes d'exploitation se trouvant dans l'environnement à votre disposition. Qu'obtenez-vous avec ce qui suit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ora <- dbDriver("Oracle", unicode_as_utf8 = TRUE)
    sessionInfo()
    Sys.info()[c("sysname", "release", "machine")]
    localeToCharset()
    capabilities()
    extSoftVersion()

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    bonjour ,

    merci de votre aide. Je copie colle ce que j'ai obtenu avec vos requêtes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    > ora <- dbDriver("Oracle", unicode_as_utf8 = TRUE)
    > sessionInfo()
    R version 3.2.2 (2015-08-14)
    Platform: x86_64-pc-linux-gnu (64-bit)
    Running under: Ubuntu 14.04.3 LTS
     
    locale:
     [1] LC_CTYPE=fr_FR.UTF-8          LC_NUMERIC=C                  LC_TIME=fr_FR.UTF-8           LC_COLLATE=fr_FR.UTF-8        LC_MONETARY=fr_FR.UTF-8      
     [6] LC_MESSAGES=fr_FR.UTF-8       LC_PAPER=fr_FR.UTF-8          LC_NAME=fr_FR.UTF-8           LC_ADDRESS=fr_FR.UTF-8        LC_TELEPHONE=fr_FR.UTF-8     
    [11] LC_MEASUREMENT=fr_FR.UTF-8    LC_IDENTIFICATION=fr_FR.UTF-8
     
    attached base packages:
    [1] compiler  stats     graphics  grDevices utils     datasets  methods   base     
     
    other attached packages:
     [1] classInt_0.1-23     RColorBrewer_1.1-2  chron_2.3-47        OpenStreetMap_0.3.2 RJSONIO_1.3-0       rgeos_0.3-15        PBSmapping_2.69.76  reshape_0.8.5      
     [9] data.table_1.9.6    xlsx_0.5.7          xlsxjars_0.6.1      rJava_0.9-7         memisc_0.97         MASS_7.3-44         lattice_0.20-33     XML_3.98-1.3       
    [17] RCurl_1.95-4.7      bitops_1.0-6        stringr_1.0.0       splancs_2.01-38     maptools_0.8-37     rgdal_1.1-3         sp_1.2-1            rmarkdown_0.8.1    
    [25] markdown_0.7.7      knitr_1.12.3        ROracle_1.2-1       DBI_0.3.1           R.utils_2.2.0       R.oo_1.19.0         R.methodsS3_1.7.0  
     
    loaded via a namespace (and not attached):
     [1] Rcpp_0.12.3      highr_0.5.1      formatR_1.2.1    plyr_1.8.3       class_7.3-14     tools_3.2.2      digest_0.6.9     evaluate_0.8     gtable_0.1.2     yaml_2.1.13     
    [11] e1071_1.6-7      raster_2.5-2     grid_3.2.2       foreign_0.8-66   ggplot2_2.0.0    magrittr_1.5     scales_0.3.0     htmltools_0.3    colorspace_1.2-6 stringi_1.0-1   
    [21] munsell_0.4.3   
    > Sys.info()[c("sysname", "release", "machine")]
                sysname             release             machine 
                "Linux" "3.19.0-28-generic"            "x86_64" 
    > localeToCharset()
    [1] "UTF-8"     "ISO8859-1"
    > capabilities()
    No protocol specified
           jpeg         png        tiff       tcltk         X11        aqua    http/ftp     sockets      libxml        fifo      cledit       iconv         NLS     profmem 
           TRUE        TRUE        TRUE        TRUE       FALSE       FALSE        TRUE        TRUE        TRUE        TRUE        TRUE        TRUE        TRUE        TRUE 
          cairo         ICU long.double     libcurl 
           TRUE       FALSE        TRUE        TRUE 
    > extSoftVersion()
                         zlib                     bzlib                        xz                      PCRE                       ICU                       TRE 
                      "1.2.8"      "1.0.6, 6-Sept-2010"              "5.1.0alpha"         "8.31 2012-07-06"                        "" "TRE 0.8.0 R_fixes (BSD)" 
                        iconv 
                 "glibc 2.19"

  4. #4
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Bonjour,
    Comme le montre les sorties ci-dessus, notamment celle de sessionInfo(), sur votre machine, les paramètres de régionalisation sont en UTF-8 et a priori, il ne devrait alors pas y avoir de souci avec les accents avec R en soi. Ce qui est un peu étrange est l'absence de l'ICU sur la machine même s'il manque des éléments pour supposer que le problème viendrait de là ; dans tous les cas, assurez-vous quand même de la présence des paquets Ubuntu libicu52 et libicu-dev, ça pourrait s'avérer utile.
    Cela dit, veuillez aussi donner un exemple des instructions qui sont à l'origine du problème : est-ce l'affichage dans R qui est incorrect ou cela concerne les rapports créés à l'aide de R puis exportés dans des fichiers externes ? Comment générez-vous ces rapports ? Quelque chose du genre cat("à ç") s'affiche-t-il correctement dans la console R ? etc. Et que donne la commande système (terminal Ubuntu) : locale

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    j'ai vérifié la présence des deux paquets libicu52 et libicu-dev et ils sont présents mais nécessitaient une mise à jour et l'ajout de icu-devtools. ce que j'ai fait.

    Et que donne la commande système (terminal Ubuntu) : locale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    administrateur@Serveur-FME-R:~$ locale
    LANG=fr_FR.UTF-8
    LANGUAGE=
    LC_CTYPE="fr_FR.UTF-8"
    LC_NUMERIC="fr_FR.UTF-8"
    LC_TIME="fr_FR.UTF-8"
    LC_COLLATE="fr_FR.UTF-8"
    LC_MONETARY="fr_FR.UTF-8"
    LC_MESSAGES="fr_FR.UTF-8"
    LC_PAPER="fr_FR.UTF-8"
    LC_NAME="fr_FR.UTF-8"
    LC_ADDRESS="fr_FR.UTF-8"
    LC_TELEPHONE="fr_FR.UTF-8"
    LC_MEASUREMENT="fr_FR.UTF-8"
    LC_IDENTIFICATION="fr_FR.UTF-8"
    LC_ALL=
    est-ce l'affichage dans R qui est incorrect ou cela concerne les rapports créés à l'aide de R
    J'ai essayé les deux et même problème...

    Quelque chose du genre cat("à ç")
    Affiche bien à ç

    j'ai un collègue qui a le problème inverse.. c'est à dire que à la lecture tt se passe bien mais à l'écriture dans une base oracle à partir de R, me^me problème d'encodage, par contre il est sur linux..

  6. #6
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Citation Envoyé par bernards111 Voir le message
    [...] libicu52 et libicu-dev [...] nécessitaient une mise à jour [...]
    En parlant des mises à jour, R en a également besoin.
    3.2.2 2015-08-14T07:13:18.272871Z : version installée sur votre machine (ainsi que sa date de sortie)
    3.2.3 2015-12-10T08:13:08.415370Z : dernière version en date
    Citation Envoyé par bernards111 Voir le message
    [...] j'ai un collègue qui a le problème inverse [...] par contre il est sur linux.
    Il y a une petite confusion ici : vous aussi êtes sur Linux, au moins du point de vue de R ; le message initial dit bien qu'à la base, vous avez un Windows qui utilise d'autres outils pour accéder à des machines Linux, mais au moment où R est utilisé, il ne voit que Linux. Peut-être vouliez-vous dire qu'il y a, pour le SGBD Oracle, une instance installée sur Windows (la vôtre) et une autre installée sur Linux (celle de votre collègue).

    Comme le montre la locale, vous avez de l'Unicode dans votre session Ubuntu, donc le problème ne vient ni de l'OS ni de R (cfr. le message précédent et les sorties obtenues avec cat("à ç")). La seule piste qui reste est de vérifier ce qui se passe lors des transferts des données entre R+l'OS et le SGBD.

    Encore une fois, pourriez-vous donner un exemple concret de la partie problématique de votre code ? Par exemple, écrire deux requêtes simples, une de lecture dans une BD et une autre d'écriture, les deux portant sur des données ayant des caractères accentués et montrer comment vous vous y prenez pour les exécuter à partir de R.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    Peut-être vouliez-vous dire qu'il y a, pour le SGBD Oracle, une instance installée sur Windows (la vôtre) et une autre installée sur Linux (celle de votre collègue).
    oui c'est ça.;
    exemple>>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ora <- dbDriver("Oracle")
    conexM <- dbConnect(Oracle(),schemasM,pwdM,dbnameO)
     
    # chargement 
     
    requetCadre<-paste("SELECT CHAMP from table",sep="")
     
    metac<-data.table(dbGetQuery(conexM,requetCadre))
     
    #pour afficher
     
    metac$CHAMP[1]
    merci

  8. #8
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Bonjour,
    C'est mieux avec un exemple, merci !
    Alors, qu'est-ce qu'il y a comme sorties quand on vérifie la locale avant de commencer à interroger la base ? Ces paramètres sont définis par la variable d'environnement de l'OS NLS_LANG ; par exemple, on peut consulter leurs valeurs ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ora <- dbDriver("Oracle")
    conexM <- dbConnect(Oracle(), schemasM, pwdM,dbnameO) 
    paraReg <- dbGetQuery(conexM, "SELECT * FROM NLS_DATABASE_PARAMETERS;")
    Si en parcourant le contenu de paraReg, vous n'avez pas des valeurs qui contiennent «FRENCH», «FRANCE» et «AL32UTF8» (ou toute autre variante de l'Unicode), alors essayez de définir NLS_LANG avant d'établir une connection avec la BD. Vous avez globalement deux choix :
    1. créer la variable dans le système avant de lancer la session R
      Code Bash : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      export NLS_LANG="FRENCH_FRANCE.AL32UTF8" # vous pouvez rendre ça permanent en plaçant la ligne dans le fichier ~/.profile
      R # ouvrir une session R qui héritera des variables d'environnement déjà définies
    2. la créer dans la session R
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Sys.setenv(NLS_LANG = "FRENCH_FRANCE.AL32UTF8")
      ora <- dbDriver("Oracle") # etc.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    ok,

    merci,j'avais vérifié ces paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                     PARAMETER                      VALUE
    1             NLS_LANGUAGE                     FRENCH
    2            NLS_TERRITORY                     FRANCE
    3             NLS_CURRENCY                          ?
    4         NLS_ISO_CURRENCY                     FRANCE
    5   NLS_NUMERIC_CHARACTERS                         , 
    6         NLS_CHARACTERSET                   AL32UTF8

    par contre je me suis aperçu que sur le shell R, je n’avais aucun problème d'accent par contre dans Rstudio si...
    je suis en train de réinstaller Rstudio, je vais voir si cela règle le problème.

  10. #10
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Citation Envoyé par bernards111 Voir le message
    je suis en train de réinstaller Rstudio, je vais voir si cela règle le problème.
    Une réinstallation est comme déployer un bazooka pour achever une mouche ! Essayez plutôt avec ça : Tools ⟶ Global Options, puis
    Nom : RStudio_encoding.png
Affichages : 849
Taille : 45,1 Ko

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    j'ai aussi essayé ça avant d'armer le canon

  12. #12
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Que Clausewitz nous vienne à l'aide alors ! En l'attendant, avez-vous aussi explicitement modifié la locale dans la session RStudio ? Ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sys.setlocale(locale = "fr_FR.utf8")
    # suite des traitements

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    oui..mais tjsr pareil...entre temps j'ai qd même eut une petite amélioration, c'est à dire que les apostrophe ne se change plus en ? au moment ou j'ai fait les modifications NLS_LANG.

    je parlais avant d'une différence de comportement entre le shell et r studio.

    mais aussi dans la manière de lancer un simple script R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ora <- dbDriver("Oracle")
    conex <- dbConnect(ora,schemas,pwd,dbnameO)
    toto<-data.frame(test="ïÖàçèé`'")
    dbWriteTable(conex,"TOTO" ,toto , row.names = FALSE, overwrite = TRUE)
    requet<-paste("Select * from TOTO ")
    dbGetQuery(conex,requet)
    dbDisconnect(conex)
    En le lançant avec run j'ai >>>iOacee`'

    avec source j'ai ????????????`'


    C'est aussi pour cela que j'ai décidé de réinstaller Rstudio....mais bon, suis un peu désarmé là...

  14. #14
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Essayez de changer le charset au moment du lancement du script. J'ignore ce qu'est «run» (est-ce une commande sous Windows ? Si oui, ceci expliquerait bien des choses*) mais
    Rscript --encoding=UTF-8 nom_script.R est une façon courante de lancer un script. Pour lancer celui-ci sous R : source("nom_script.R", encoding = "UTF-8").
    Aussi, pouvez-vous forcer l'encodage des données au moment de leur création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xxx <- "ïÖàçèé`'"
    Encoding(xxx) <- "UTF-8" # ou xxx <- enc2utf8(xxx)
    toto <- data.frame(test = xxx)
    __
    * Comment fonctionne au juste MobaXterm ? Les commandes Windows sont-elles toujours accessibles dans une session Linux commencée avec MobaXterm ? Si oui, quelqu'un a récemment signalé le même souci sous Windows et l'a surmonté à l'aide chcp 1252. Ceci pourrait être une piste viable dans votre cas. Pour le reste, il me semble que j'ai épuisé mes cartouches.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    ça marche

    Encore merci pour ton aide précieuse..C'est la classe de prendre du temps pour ça.
    La réinstalle de rstudio + le paramétrage du NLS_LANG m'a permis de enfin pouvoir créer des rapports automatique sans problème d'encodage ...ça fait du bien mais qu'est ce que c'était


    Merci juliatheric.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problèmes de performances sur une base oracle 10g
    Par ORAMEL dans le forum Oracle
    Réponses: 3
    Dernier message: 11/09/2007, 09h11
  2. Réponses: 2
    Dernier message: 03/09/2007, 14h41
  3. Travailler sur une base Oracle
    Par prolog18 dans le forum Outils
    Réponses: 1
    Dernier message: 26/07/2007, 12h13
  4. comment on peut travailler sur une base oracle
    Par Bourak dans le forum Oracle
    Réponses: 1
    Dernier message: 18/06/2007, 18h16
  5. Connection de BO v6.1.b sur une base Oracle 9
    Par HBA_BO dans le forum Administration-Migration
    Réponses: 12
    Dernier message: 09/11/2006, 17h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo