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 GNU Discussion :

Caractères accentués transformés en ▒


Sujet :

Shell et commandes GNU

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut Caractères accentués transformés en ▒
    Bonjour,

    le code suivant me permet de récupérer une liste de fichiers associés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mysql -u $mysql_user --password=$mysql_pass -e "select concat(SOU_FICHIER_SQL, '!', SOU_FICHIER_CSV) from sys_source;" -D mabdd -B -s 2> /dev/null \
       | while read nom
         do
            ficSql=`echo $nom | cut -f1 -d!`
            ficCsv=`echo $nom | cut -f2 -d!`
            echo $ficSql - $ficCsv
            /.../importFichier.sh "$ficSql" "$ficCsv"
         done
    et importFichier.sh test l'existence du fichier ($FIC_CSV correspond au deuxième paramètre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    echo "Arguments CSV : " $2
    if [ -e "$FIC_CSV" ] ; then
    	echo Le ficher $FIC_CSV existe
    else
    	echo Le ficher $FIC_CSV n existe pas
    	exit 2
    fi
    Le problème est que les fichiers contenant des caractères accentués ne sont pas trouvés. Un ls m'affiche bien les fichiers avec caractères accentués dans leur nom. importFichier.sh donne le résultat suivant :
    Arguments CSV : R▒gles Hopital Bris de Glace + sp▒cificit▒s.csv
    Le ficher /.../R▒gles Hopital Bris de Glace + sp▒cificit▒s.csv n existe pas
    J'ai donc essayé de supprimer les accents avec le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in /.../*.csv
    do
    	echo "nom actuel : "$i
    	nouveau_nom=`echo "$i"|sed 'y/àâçéèêëîïôöùüûÀÇÉÈËÊÏÎÖÔÙÜÛ/aaceeeeiioouuuACEEEEIIOOUUU/'`
    	echo "nouveau_nom : "$nouveau_nom
    done
    Cela donne :
    nom actuel : /.../Règles Hopital Bris de Glace + spécificités.csv
    sed: -e expression n▒1, caract▒re 85: les cha▒nes destin▒es ▒ la commande `y' ont des longueurs diff▒rentes
    nouveau_nom :
    La même commande directement dans la console donne le même résultat :
    bash-3.2$ ls R*
    Règles Hopital Bris de Glace + spécificités.csv
    bash-3.2$ echo "Règles Hopital Bris de Glace + spécificités.csv"|sed y/àâçéèêëîïôöùüûÀÇÉÈËÊÏÎÖÔÙÜÛ/aaceeeeiioouuuACEEEEIIOOUUU
    sed: -e expression n▒1, caract▒re 85: les cha▒nes destin▒es ▒ la commande `y' ont des longueurs diff▒rentes
    -bash: echo: write error: Relais bris▒ (pipe)
    Les deux chaînes "àâçéèêëîïôöùüûÀÇÉÈËÊÏÎÖÔÙÜÛ" et "aaceeeeiioouuuACEEEEIIOOUUU" ont pourtant la même longueur contrairement à ce qu'indique le message d'erreur.

    Je soupçonne un paramétrage de Linux d'être la source de ce problème. Savez-vous ce qui ne va pas ?
    Christophe

    Pensez à mettre quand c'est le cas.

  2. #2
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    Bonjour,

    c'est un problème d'encodage.

    Pour voir les encodages sur ton système faire:

    pour ajouter un nouvel encodage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locale-gen fr_FR ISO-8859-1
    Si le problème est au niveau de ton fichier, converti le en UTF8 (si c'est un fichier qui a été crée en dehors de ton système ou provient d'un copier/coller windows vers unix)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iconv -f UTF-8 -t ISO-8859-1 in.txt > out.txt
    N'oubliez pas la balise

    est ton ami mais quand Google ne trouve pas quelque choses, il demande à Chuck Norris.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Apparemment, il y a déjà le "fr_FR ISO-88591". Résultat de locale -a (seulement les fr*) :
    fr_BE
    fr_BE@euro
    fr_BE.iso88591
    fr_BE.iso885915@euro
    fr_BE.utf8
    fr_CA
    fr_CA.iso88591
    fr_CA.utf8
    fr_CH
    fr_CH.iso88591
    fr_CH.utf8
    french
    fr_FR
    fr_FR@euro
    fr_FR.iso88591
    fr_FR.iso885915@euro
    fr_FR.utf8
    fr_LU
    fr_LU@euro
    fr_LU.iso88591
    fr_LU.iso885915@euro
    fr_LU.utf8
    La commande "locale-gen" n'existe pas dans mon bash.
    Christophe

    Pensez à mettre quand c'est le cas.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 773
    Points
    30 773
    Par défaut
    Citation Envoyé par Diablo_22 Voir le message
    Si le problème est au niveau de ton fichier, converti le en UTF8 (si c'est un fichier qui a été crée en dehors de ton système ou provient d'un copier/coller windows vers unix)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iconv -f UTF-8 -t ISO-8859-1 in.txt > out.txt
    Pour convertir de Windows vers Unix, ce ne serait pas dans l'autre sens ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iconv -f ISO-8859-1 -t UTF-8 in.txt > out.txt
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Mes fichiers sont bien en Unix (conversion effectuée avec Notepad++).
    Christophe

    Pensez à mettre quand c'est le cas.

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    ça n'a rien à voir, la "conversion" de fichier windows <-> unix concerne les fins de lignes (\n VS \r\n), iconv permet de modifier l'encodage des caractères, on peut très bien avoir un fichier encodé ISO-8859-1 sous Linux comme sous Windows, d'ailleurs la page de code de Windows par défaut c'est plutôt cp1252 il me semble...

    au delà de ça, les problèmes d'encodage c'est toujours pénible
    • que donne la commande locale sans option ?
    • quel est l'encodage des données extraites dans mysql ?

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 667
    Points : 15 002
    Points
    15 002
    Par défaut
    Citation Envoyé par Christophe P. Voir le message
    Les deux chaînes "àâçéèêëîïôöùüûÀÇÉÈËÊÏÎÖÔÙÜÛ" et "aaceeeeiioouuuACEEEEIIOOUUU" ont pourtant la même longueur contrairement à ce qu'indique le message d'erreur.
    À l'œil ! Mais pas vu de la machine.
    Il te faut savoir que les caractères Unicode peuvent être encodés avec 2, 3, ou 4 octets, contrairement aux caractères ASCII basiques (1 octet).

    J'ai cherché sed +unicode et j'ai trouvé cette lecture rapide assez intéressante.

    Mais en remplaçant les caractères accentués par des basiques, tu contournes le problème...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 611
    Points : 10 517
    Points
    10 517
    Par défaut
    Citation Envoyé par Jipété Voir le message
    À l'œil ! Mais pas vu de la machine.
    Il te faut savoir que les caractères Unicode peuvent être encodés avec 2, 3, ou 4 octets, contrairement aux caractères ASCII basiques (1 octet).
    Cela dépend de pleins de paramètres

    Les chaînes de caractères sont de la même longueur, mais elles peuvent avoir un nombre d'octets différents. (En C, c'est la différence en strlen/ wcslen et sizeof(char)/ sizeof(wchar_t))

    Ensuite, si je ne dis pas de bêtises, un autre problème c'est l'UTF-16: parce qu'un caractère peut correspondre à 2 codes UTF-16.
    Un exemple bidon: é peut être stocké Accent + lettre e.

    Il faut que la fonction wcslen arrive à détecter ces caractères

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Résultat de la commande locale :
    -bash-3.2$ locale
    LANG=fr_FR
    LC_CTYPE="fr_FR"
    LC_NUMERIC="fr_FR"
    LC_TIME="fr_FR"
    LC_COLLATE="fr_FR"
    LC_MONETARY="fr_FR"
    LC_MESSAGES="fr_FR"
    LC_PAPER="fr_FR"
    LC_NAME="fr_FR"
    LC_ADDRESS="fr_FR"
    LC_TELEPHONE="fr_FR"
    LC_MEASUREMENT="fr_FR"
    LC_IDENTIFICATION="fr_FR"
    LC_ALL=
    Toutes les tables de la base ont été créées de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create table matable(
    	...
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Quand je lance la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS
    J'obtiens pour toutes mes colonnes de type chaine de caractères :
    - CHARACTER_SET_NAME = latin1
    - COLLATION_NAME = latin1_swedish_ci
    Christophe

    Pensez à mettre quand c'est le cas.

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 667
    Points : 15 002
    Points
    15 002
    Par défaut
    Citation Envoyé par Christophe P. Voir le message
    Résultat de la commande locale :
    Sur ma machine, locale me renvoie
    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
    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=
    Vu, le ".UTF-8" en plus ?

    Citation Envoyé par Christophe P. Voir le message
    Quand je lance la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS
    J'obtiens pour toutes mes colonnes de type chaine de caractères :
    - CHARACTER_SET_NAME = latin1
    - COLLATION_NAME = latin1_swedish_ci
    En fait, je pense beaucoup plus à un problème d'environnement qu'à un problème de BdD, parce que ça :
    Citation Envoyé par Christophe P. Voir le message
    bash-3.2$ ls R*
    Règles Hopital Bris de Glace + spécificités.csv
    bash-3.2$ echo "Règles Hopital Bris de Glace + spécificités.csv"|sed y/àâçéèêëîïôöùüûÀÇÉÈËÊÏÎÖÔÙÜÛ/aaceeeeiioouuuACEEEEIIOOUUU
    sed: -e expression n▒1, caract▒re 85: les cha▒nes destin▒es ▒ la commande `y' ont des longueurs diff▒rentes
    -bash: echo: write error: Relais bris▒ (pipe)
    ça n'a rien à voir avec une quelconque BdD puisque tu as le problème en ligne de commande (deux dernières lignes).
    Me demande en plus si ton bash n'est pas un peu vieux.
    Chez moi, bash --version me renvoie 4.2.37 et il n'a pas été mis à jour depuis 2 ans et demi (ouh ! c'est pas bien )...

    De toute façon, tant que ce qui précède n'est pas réglé, pas la peine d'aller plus loin !
    Sur ma machine Debian, le contenu de /etc/locale.gen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    # fr_FR ISO-8859-1
    fr_FR.UTF-8 UTF-8
    # fr_FR@euro ISO-8859-15
    ...
    et le contenu de /etc/default/locale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #  File generated by update-locale
    LANG="fr_FR.UTF-8"
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 261
    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 261
    Points : 12 663
    Points
    12 663
    Par défaut
    Bonjour,

    Pourrais-tu passer la commande suivante:
    Pour voir déjà quel format est détecté.

    Pourrais-tu aussi fournir une portion de ton fichier csv (en attachement), avec juste 3 ou 4 lignes qui posent problème.

    Ou bien, tu peux nous donner aussi le résultat de 3 ou 4 lignes de la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -l80 -n 'l' fichier.csv
    Cordialement.

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 667
    Points : 15 002
    Points
    15 002
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Pourrais-tu passer la commande suivante:
    Pour voir déjà quel format est détecté.
    Et avec -i ça renvoie le charset, ça peut être utile, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # file -i timings_sauvegarde.txt 
    timings_sauvegarde.txt: text/plain; charset=utf-8
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    @Jipété Je n'ai pas trouvé les fichiers dont tu parles.
    -bash-3.2$ whereis locale
    locale: /usr/bin/locale /usr/lib/locale /usr/include/locale.h /usr/share/locale man/man5/locale.5.gz /usr/share/man/man1/locale.1.gz /usr/share/man/man1p/locale
    D'après la commande file, les fichiers n'ont pas tous le même charset :
    -bash-3.2$ file -i 'Règles Hopital Bris de Glace + spécificités.csv'
    Règles Hopital Bris de Glace + spécificités.csv: text/plain; charset=us-ascii
    -bash-3.2$ file -i role.csv
    role.csv: text/plain; charset=iso-8859-1
    -bash-3.2$ file -i étudiants-Final.csv
    étudiants-Final.csv: text/plain; charset=unknown
    Ce sont des fichiers reçus de différentes sources.
    Christophe

    Pensez à mettre quand c'est le cas.

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 261
    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 261
    Points : 12 663
    Points
    12 663
    Par défaut
    Hum,

    Je crois que l'on s'est perdu en route.
    Dans ton post initial, tu parles d'un extract depuis une base de donnée des noms de fichiers dont tu n'arrives pas à tester leur existence suite à un problème de caractères (accent) non reconnu.

    C'est le charset de cet extract que nous avons besoin de savoir, pas celui contenu dans les fichiers eux-même.

    Donc, tu lances ton extract des noms de fichier depuis ta base vers un fichier et tu nous donne ce que retourne la commande file ainsi que la commande sed que j'ai fourni dans mon précèdent post.
    Cordialement.

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Je ne stocke pas le nom des fichiers dans un fichier. J'ai ajouté ">> /.../liste_fichiers.txt" pour obtenir un fichier avec cette liste.

    -bash-3.2$ file -i liste_fichiers.txt
    liste_fichiers.txt: text/plain; charset=iso-8859-1
    -bash-3.2$ sed -l80 -n 'l' liste_fichiers.txt
    $
    load_etu_correspondanceprofilroles.sql - vide.csv$
    load_etu_facmedecine_etudiants.sql - \351tudiants-Final.csv.csv$
    load_etu_siriusunitessupplpmt.sql - vide.csv$
    load_etu_struct_tabletranscouf.sql - Struct-TableTranscoUF.csv$
    load_etu_struct_ufcomplementaires.sql - R\350gles Hopital Bris de Glace + sp\
    \351cificit\351s.csv$
    Les caractères accentués sont codés. Comment puis-je traiter cela ?
    Christophe

    Pensez à mettre quand c'est le cas.

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 261
    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 261
    Points : 12 663
    Points
    12 663
    Par défaut
    Ok,

    Et est-ce que tu pourrais aussi faire un ls <nom_d'un_fichier_avec_accent> | sed -n 'l' , ceci juste pour confirmer dans quel format est enregistré le nom du fichier sur le FS ?
    Cordialement.

  17. #17
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    voici le ls :
    -bash-3.2$ ls 'Règles Hopital Bris de Glace + spécificités.csv' | sed -n 'l'
    R\303\250gles Hopital Bris de Glace + sp\303\251cificit\303\251s.csv$
    Christophe

    Pensez à mettre quand c'est le cas.

  18. #18
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 261
    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 261
    Points : 12 663
    Points
    12 663
    Par défaut
    ok, donc en utilisant iconv:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mysql -u $mysql_user --password=$mysql_pass -e "select concat(SOU_FICHIER_SQL, '!', SOU_FICHIER_CSV) from sys_source;" -D mabdd -B -s 2> /dev/null \
       | iconv -f ISO-8859-1 -t UTF-8 | while read nom
         do
            ficSql=`echo $nom | cut -f1 -d!`
            ficCsv=`echo $nom | cut -f2 -d!`
            echo $ficSql - $ficCsv
            /.../importFichier.sh "$ficSql" "$ficCsv"
         done
    ou directement via mysql (pas sure de la syntaxe car je ne peux pas tester):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mysql -u $mysql_user --password=$mysql_pass -e "select convert( concat(SOU_FICHIER_SQL, '!', SOU_FICHIER_CSV) USING utf-8) from sys_source;" -D mabdd -B -s 2> /dev/null \
       | while read nom
         do
            ficSql=`echo $nom | cut -f1 -d!`
            ficCsv=`echo $nom | cut -f2 -d!`
            echo $ficSql - $ficCsv
            /.../importFichier.sh "$ficSql" "$ficCsv"
         done
    Cordialement.

  19. #19
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Merci disedorgue, la première solution fonctionne, mais pas la deuxième (après avoir remplacé "utf-8" par "utf8").
    Christophe

    Pensez à mettre quand c'est le cas.

  20. #20
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 667
    Points : 15 002
    Points
    15 002
    Par défaut
    Citation Envoyé par Christophe P. Voir le message
    Merci disedorgue, la première solution fonctionne, mais pas la deuxième (après avoir remplacé "utf-8" par "utf8").
    Pourquoi ce remplacement ?

    Bon, enfin, content pour toi que ça soit résolu.
    Citation Envoyé par Christophe P. Voir le message
    @Jipété Je n'ai pas trouvé les fichiers dont tu parles.
    Désolé, je me suis un peu emporté, je pensais que tu étais sous Debian (et en fait on ne sait pas sous quoi tu tournes).

    Sinon, j'ai failli poster ça (et tous comptes faits je le poste quand même, pour la postérité et/ou pour un lecteur qui aura un souci similaire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # touch àéèç
    # ls àéèç 
    àéèç
    # ls àéèç | sed -n 'l'
    \303\240\303\251\303\250\303\247$
    # echo àéèç | sed 'y/àâçéèêëîïôöùüûÀÇÉÈËÊÏÎÖÔÙÜÛ/aaceeeeiioouuuACEEEEIIOOUUU/'
    aeec
    Conclusion : sed est capable de travailler avec les caractères accentués, si tant est que tout soit correct autour.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Transformation des caractères accentués
    Par stounouslous dans le forum NetBeans
    Réponses: 9
    Dernier message: 29/09/2010, 18h14
  2. [SQL] caractère accentués transformés en é
    Par guian dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 20/08/2008, 12h54
  3. Réponses: 4
    Dernier message: 10/04/2007, 17h27
  4. Réponses: 4
    Dernier message: 20/12/2006, 15h04
  5. Caractères accentués transformés
    Par Anduriel dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2006, 19h47

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