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

Shell et commandes POSIX Discussion :

[awk] Fonction printf et gestion des accents


Sujet :

Shell et commandes POSIX

  1. #41
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    En principe, si tu change la variable LANG, tu modifie la 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
    19
    $ locale
    LANG=C
    LC_CTYPE="C"
    LC_NUMERIC="C"
    LC_TIME="C"
    LC_COLLATE="C"
    LC_MONETARY="C"
    LC_MESSAGES="C"
    LC_ALL=
    $ LANG=fr_FR.UTF-8
    $ locale
    LANG=fr_FR.UTF-8
    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_ALL=
    Là, je n'ai pas encore les accents, et si je fais exec bash, je les ai bien mais il faut bien que je passe en UTF8 mais surtout en fr_FR pas C.UTF-8
    Cordialement.

  2. #42
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Oui, lorsque je fais la commande de jlliagre, que ce soit avec la variable LC_ALL ou LC_LANG ça marche.

    En fait puisque je suis en bash, j'ai saisi LC_ALL=fr_FR.UTF-8 exec /usr/bin/bash, et les accents s'affichent parfaitement dans putty

    J'ai donc essayé d'introduire cette commande dans mon script bash, voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
    clear
    LC_ALL=fr_FR.UTF-8 exec /usr/bin/bash
    Je me dis donc que j'ai mal fait puisque le script ne se lance plus et la console putty affiche uniquement :

  3. #43
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Non, ceci ne peux pas fonctionner...
    Peux-tu nous expliquer le but de ton script ?
    -Celui-ci fait de l'affichage à l'écran ou il s'execute pour traiter quelque chose et donner un fichier en sortie ?
    -En gros, est-ce du mode batch ou du mode interactif ?
    Car pour l'instant, les solutions que l'on t'a donnée sont plus pour le mode batch.
    Cordialement.

  4. #44
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Le but de mon script est de générer un fichier plat (champs délimités par un nombre de colonnes) à l'aide de plusieurs fichiers plats en entrée (champs délimités par des ; ).

    Dans un des fichiers en entrée, j'ai des chaînes de caractère contenant des caractères spéciaux (accents) que je souhaite intégrer dans des champs de n colonnes prédéfinies, d'où ma commande de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomTraitement=$(echo -e "$lineControleEnveloppeCalendrier" | sed 's/[éèê]/e/g' | sed 's/[ô]/o/g' | awk -F";" '{printf("%-70s",$1)}')
    La variable $lineControleEnveloppeCalendrier représente donc ici une ligne d'un fichier en entrée ou je souhaite récupérer le 1er champs sur 70 colonnes.
    J'insère ensuite la variable $NomTraitement dans mon fichier en sortie.

    J'espere que mon explication est assez claire

  5. #45
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Ok, je ne voulais pas trop donner la solution suivante, mais peux tu essayer ceci en restant en locale à C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomTraitement=$(echo -e "$lineControleEnveloppeCalendrier" | nawk '{X=$1;gsub(/(é|è|ê|ô)/,"e",X);Y=length($1)-length(X);printf("%-"(70+Y)"s",$1)}')
    ici, je ne modifie pas la chaine, je crée une nouvelle chaine sur laquelle je remplace les caractère accentués par n'importe quel caractère, puis je soustrait la longueur de la chaine originale par la longueur de la nouvelle chaine et j'affiche la chaine originale en réajustant la longueur d'affichage du printf.

    PS: coté sed, dans ta ligne de départ, en utilisant la commande y au lieu de la commande s, tu économise un sed (ex: sed -e 'y/éèêô/eeeo/')
    Cordialement.

  6. #46
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Citation Envoyé par Gothan44 Voir le message
    J'ai donc essayé d'introduire cette commande dans mon script bash, voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_ALL=fr_FR.UTF-8 exec /usr/bin/bash
    Remplace cette ligne par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ "$LC_ALL" = fr_FR.UTF-8 ] || LC_ALL=fr_FR.UTF-8 exec $0 "$@"
    ɹǝsn *sıɹɐlos*

  7. #47
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Juste pour information, sur le solaris à ma disposition, un script du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/usr/bin/bash
    LC_ALL=fr_FR.UTF-8
    echo ééé
    m'affiche bien les ééé sans avoir eu besoin de touché à ma configuration de départ dont la locale est en C.
    Cordialement.

  8. #48
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bjr disedorgue, bjr jlliagre,

    @disedorgue : j'ai essayé ta commande nawk et ça ne marche pas. Au final (dans mon fichier en sortie), je n'obtiens que le premier mot de ma chaîne de caractères, par contre il s'affiche bien sur 70 colonnes

    Quand je fais ça dans mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/usr/bin/bash
    LC_ALL=fr_FR.UTF-8
    echo ééé
    j'obtiens la même chose que toi !
    J'obtiens aussi exactement la même chose sans mettre la variable LC_ALL=fr_FR.UTF-8, en mettant uniquement echo ééé.
    Ce que je ne peux pas faire, c'est saisir directement des é dans la console putty, là il ne me les affiche pas.

    @jlliagre : au début de mon script, en mettant la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ "$LC_ALL" = fr_FR.UTF-8 ] || LC_ALL=fr_FR.UTF-8 exec $0 "$@"
    J'obtiens des erreurs du type 'chaîne incorrecte' et mon fichier en sortie est vide.

  9. #49
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Peux-tu fournir un input plus conséquent, avec l'output attendu et le bout de code complet qui passe de l'input à l'output ?

    Pour l'histoire de l'affichage des caractères accentués lors de leur saisie:
    Si tu execute un shell avec les locales définies en C, celui-ci n'agira que dans le sens de cette définition, pour qu'il puisse répondre avec une autre définition de locale, il faut définir la locale et relancer le shell qui, lui, héritera de cette nouvelle définition. Si tu ne relance pas le shell, les commandes utiliseront bien la nouvelle définition de locale mais pas les ressource déjà en cours (comme le tty) car leur configuration a déjà été établi.
    Cordialement.

  10. #50
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Ok pour l'affichage des caractères accentués

    Pour le fichier en entrée 'fichierEnEntree.txt' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Les éléments ligne 1;champs2;champs3
    Les éléments ligne 2;champs2;champs3
    Les éléments ligne 3;champs2;champs3
    Les éléments ligne 4;champs2;champs3
    Les éléments ligne 5;champs2;champs3
    Pour le fichier en sortie 'fichierEnSortie.txt' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Les éléments ligne 1                                champs2
    Les éléments ligne 2                                champs2
    Les éléments ligne 3                                champs2
    Les éléments ligne 4                                champs2
    Les éléments ligne 5                                champs2
    Concernant le fichier 'fichierEnSortie.txt', le premier champs doit être sur 70 colonnes, et le 2nd sur 25. Actuellement, il s'affiche donc sur 70 colonnes mais sans les accents

    A côté de ça, j'ai donc un script qui réalise le traitement pour aboutir au fichier en sortie, en voici une partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while read lineFichierEnEntree
    do
     
       NomTraitement=$(echo -e "$lineFichierEnEntree" | sed 's/[éèê]/e/g' | sed 's/[ô]/o/g' | awk -F";" '{printf("%-70s",$1)}' )
       NomEmetteur=$(echo -e "$lineFichierEnEntree" | sed 's/[éèê]/e/g'| sed 's/[ô]/o/g'| awk -F";" '{printf("%-25s",$3)}' )
     
       echo "$NomTraitement$NomEmetteur" >> fichierEnSortie.txt
     
    done < fichierEnEntree.txt

  11. #51
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Citation Envoyé par Gothan44 Voir le message
    @jlliagre : au début de mon script, en mettant la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ "$LC_ALL" = fr_FR.UTF-8 ] || LC_ALL=fr_FR.UTF-8 exec $0 "$@"
    J'obtiens des erreurs du type 'chaîne incorrecte' et mon fichier en sortie est vide.
    Quels sont précisément ces messages d'erreur et quelle commande du script les génère ?

    Qu'affiche ce script sur ta machine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    set -x
    echo $LC_ALL
    [ "$LC_ALL" = fr_FR.UTF-8 ] || LC_ALL=fr_FR.UTF-8 exec $0 "$@"
    echo $LC_ALL
    ɹǝsn *sıɹɐlos*

  12. #52
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    pour moi, sans rien changé coté locale (donc en restant en "C"), ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat fich1.txt
    Les éléments ligne 1;champs2;champs3
    Les éléments ligne 2;champs2;champs3
    Les éléments ligne 3;champs2;champs3
    Les éléments ligne 4;champs2;champs3
    Les éléments ligne 5;champs2;champs3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat tefich1.sh
    while read lineFichierEnEntree
    do
     
       NomTraitement=$(echo -e "$lineFichierEnEntree" | nawk -F';' '{X=$1;gsub(/(é|è|ê|ô)/,"e",X);Y=length($1)-length(X);printf("%-"(70+Y)"s",$1)}')
       NomEmetteur=$(echo -e "$lineFichierEnEntree" | nawk -F';' '{X=$3;gsub(/(é|è|ê|ô)/,"e",X);Y=length($3)-length(X);printf("%-"(25+Y)"s",$3)}')
     
       echo "$NomTraitement$NomEmetteur" >> fichierEnSortie.txt
     
    done < fich1.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat fichierEnSortie.txt
    Les éléments ligne 1                                                  champs3
    Les éléments ligne 2                                                  champs3
    Les éléments ligne 3                                                  champs3
    Les éléments ligne 4                                                  champs3
    Les éléments ligne 5                                                  champs3
    Cordialement.

  13. #53
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    @jlliagre : je crée plusieurs fichiers intermédiaires dans mon traitement, lorsque je mets la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ "$LC_ALL" = fr_FR.UTF-8 ] || LC_ALL=fr_FR.UTF-8 exec $0 "$@"
    mes fichiers intermédiaires sont vides, et lors de l'affichage de ces fichiers dans la console (j'affiche mes fichiers intermédiaires sur le terminal pendant mon traitement), j'obtiens des erreurs 'Chaîne incorrecte' (ce n'est pas exactement écrit comme ça mais je n'arrive pas a reproduire les caractères spéciaux de la console putty)

    Lorsque j'exécute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo $LC_ALL
    [ "$LC_ALL" = fr_FR.UTF-8 ] || LC_ALL=fr_FR.UTF-8 exec $0 "$@"
    echo $LC_ALL
    j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fr_FR.UTF-8
    fr_FR.UTF-8
    @disedorgue : J'ai dû me planter la première fois dsl :calim2: ! Ta commande fonctionne parfaitement :) :D :)

    Merci à vous 2 pour votre aide j'ai appris plein de choses !
    Je passe le post en résolu en espérant qu'il serve à d'autres !

    Bonne journée

  14. #54
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Citation Envoyé par Gothan44 Voir le message
    @jlliagre : je crée plusieurs fichiers intermédiaires dans mon traitement, lorsque je mets la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ "$LC_ALL" = fr_FR.UTF-8 ] || LC_ALL=fr_FR.UTF-8 exec $0 "$@"
    mes fichiers intermédiaires sont vides, et lors de l'affichage de ces fichiers dans la console (j'affiche mes fichiers intermédiaires sur le terminal pendant mon traitement), j'obtiens des erreurs 'Chaîne incorrecte' (ce n'est pas exactement écrit comme ça mais je n'arrive pas a reproduire les caractères spéciaux de la console putty)

    Lorsque j'exécute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo $LC_ALL
    [ "$LC_ALL" = fr_FR.UTF-8 ] || LC_ALL=fr_FR.UTF-8 exec $0 "$@"
    echo $LC_ALL
    j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fr_FR.UTF-8
    fr_FR.UTF-8
    D'après la sortie du script, la ligne que je t'ai demandé d'ajouter ne modifie rien au script puisque tu es déjà en UTF-8. Difficile de comprendre pourquoi tu dis que tu obtient des messages d'erreur à cause d'elle (ou alors, tu veux dire que tu obtiens ces messages d'erreur que la ligne soit là ou pas ?)
    ɹǝsn *sıɹɐlos*

  15. #55
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Personnellement, coté shell, je suis en locale "C", et ceci fonctionne pour moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while read lineFichierEnEntree
    do
       LANG=fr_FR.UTF-8 
       NomTraitement=$(echo -e "$lineFichierEnEntree" | awk -F";" '{printf("%-70s",$1)}' )
       NomEmetteur=$(echo -e "$lineFichierEnEntree" | awk -F";" '{printf("%-25s",$3)}' )
     
       echo "$NomTraitement$NomEmetteur" >> fichierEnSortie.txt
     
    done < fichierEnEntree.txt
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while read lineFichierEnEntree
    do
     
       NomTraitement=$(echo -e "$lineFichierEnEntree" | LANG=fr_FR.UTF-8 awk -F";" '{printf("%-70s",$1)}' )
       NomEmetteur=$(echo -e "$lineFichierEnEntree" | LANG=fr_FR.UTF-8 awk -F";" '{printf("%-25s",$3)}' )
     
       echo "$NomTraitement$NomEmetteur" >> fichierEnSortie.txt
     
    done < fichierEnEntree.txt
    Cordialement.

  16. #56
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Il y a plusieurs façons de choisir sa locale. En fait, ici on se fiche de la locale, c'est le jeu de caractère qui compte mais il n'est pas possible de choisr uniquement un jeu de caractères, il faut aussi choisir la langue et le pays. La seule méthode qui ne peut pas être neutralisée par une autre est l'affectation de la variable LC_ALL, c'est pourquoi j'ai toujours utilisé celle là et pas LANG.

    D'autre part, il faut être sûr que la variable soit exportée pour qu'elle soit prise en compte par les programmes appelés et ce n'est garanti que dans ton deuxième script.

    En relisant ce thread, je suis aussi tombé sur "C.UTF-8". C'est une locale qui ne peut pas exister car contradictoire. "C" implique un jeu de caractère ASCII sur 7 bit incompatible donc avec UTF-8. Le plus proche (mais avec des différences quand même) serait "en_US.UTF-8".
    ɹǝsn *sıɹɐlos*

  17. #57
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Il y a plusieurs façons de choisir sa locale. En fait, ici on se fiche de la locale, c'est le jeu de caractère qui compte mais il n'est pas possible de choisr uniquement un jeu de caractères, il faut aussi choisir la langue et le pays. La seule méthode qui ne peut pas être neutralisée par une autre est l'affectation de la variable LC_ALL, c'est pourquoi j'ai toujours utilisé celle là et pas LANG.
    Au départ, j'avais utilisé la seule concerné (LC_CTYPE) pour le problème, après j'ai un peu dérapé en étant plus générique.
    Pour que tout le monde puisse comprendre l'erreur:
    Si LANG est défini, celui-ci sera utilisé par défaut si la categorie de la locale utile (LC_CTYPE,LC_COLLATE,...) n'est pas défini explicitement.
    LC_ALL s'il est défini et non vide, sera utilisé que la catégorie utile soit défini ou non.
    D'autre part, il faut être sûr que la variable soit exportée pour qu'elle soit prise en compte par les programmes appelés et ce n'est garanti que dans ton deuxième script.
    Ici, j'ai honte de mon erreur
    En relisant ce thread, je suis aussi tombé sur "C.UTF-8". C'est une locale qui ne peut pas exister car contradictoire. "C" implique un jeu de caractère ASCII sur 7 bit incompatible donc avec UTF-8. Le plus proche (mais avec des différences quand même) serait "en_US.UTF-8".
    Pourtant, elle existe et utilise la charmap UTF-8 alors que C utilise le charmap ANSI_X3.4-1968 (C'est le nom "LATIN" de ascii ) mais pour l'instant, je ne peux pas vérifier sous solaris (je ferais donc un edit de ce post pour confirmer ou infirmer).
    EDIT: Donc sous solaris, on a pas la locale C.UTF-8 (qui comme tu le dis semble évident, on a donc un travers gnu qui peut préter à confusion).
    Par contre, j'ai reparcouru rapidement le thread et je ne trouve pas trace du C.UTF-8..., c'est bien dans ce thread qu'il apparait ?
    Je sais qu'a un certain moment on l'a évoqué mais peut-être pas dans ce thread (comme les histoires de locale sont des problèmes réccurent ).
    Cordialement.

  18. #58
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    @jlliagre : j'obtiens des erreurs quand la ligne est là uniquement. Par contre j'ai réessayé ta commande en redémarrant Putty, et là le premier echo $LC_ALL ne m'a rien renvoyé (renvoie un blanc), et le 2eme me renvoie bien fr_FR.UTF-8.

  19. #59
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Il s'agit de ce post:
    Citation Envoyé par disedorgue Voir le message
    Là, je n'ai pas encore les accents, et si je fais exec bash, je les ai bien mais il faut bien que je passe en UTF8 mais surtout en fr_FR pas C.UTF-8
    Tu as raison, il semble que cette locale chimérique soit bien implémentée par des versions récentes d'HP-UX, certains Gnu/Linux et peut-être aussi AIX.
    ɹǝsn *sıɹɐlos*

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Gestion des accents avec la fonction UploadFile
    Par doozolab dans le forum VB.NET
    Réponses: 2
    Dernier message: 18/10/2013, 12h34
  2. [PHP 5.2] Fonction preg_match et gestion des accents
    Par sheira dans le forum Langage
    Réponses: 6
    Dernier message: 10/08/2010, 16h34
  3. [EZPDF] gestion des accents
    Par cyreel dans le forum Bibliothèques et frameworks
    Réponses: 13
    Dernier message: 26/06/2007, 18h59
  4. [Regex] gestion des accents dans un mot
    Par joseph_p dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 10/05/2006, 09h04
  5. [Conception] Gestion des accents dans une base de données
    Par MiJack dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/07/2005, 11h41

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