Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/10/2010, à 19:19

luigifab

[Résolu / PERL] Accent avec la fonction ucwords (gestion de l'UTF8)

Bonsoir

En PERL, la fonction ucwords n'existe pas (enfin je crois).
J'en ai donc trouvée une sur Google.

Le problème, c'est qu'elle ne prend pas en compte les caractères accentués.
Voici la fonction en question :

sub ucwords {

    my $this = shift;
    my $str = shift;

    $str = lc($str);
    $str =~ s/\b(\w)/\u$1/g;

    return $str;
}

J'ai vu sur un forum, que le \w est censé prendre en compte les caractères accentués, sauf que j'ai pas tout compris.

http://www.perlmonks.org/?node_id=648332#648764 a écrit :

The "\w" and "\W" work as expected on utf8 strings -- \w matches anything that is a letter or digit, no matter if it's ASCII, extended Latin, Greek, Arabic, Thai or whatever, and \W matches anything that is not a letter or digit. But you have to know for sure that you are applying the regex to a utf8 string that has been flagged internally by Perl as being a utf8 string. If you don't understand what that means, it's not surprising that you've had trouble with this stuff.

I need help...

Dernière modification par luigifab (Le 16/03/2011, à 20:21)


Free Ukraine!

Hors ligne

#2 Le 01/10/2010, à 19:37

sputnick

Re : [Résolu / PERL] Accent avec la fonction ucwords (gestion de l'UTF8)

$ perl -e 'print ucfirst('bonjour'),$/;'
Bonjour

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 01/10/2010, à 20:02

luigifab

Re : [Résolu / PERL] Accent avec la fonction ucwords (gestion de l'UTF8)

$ perl -e "print ucfirst('bonjour jean'),$/;"
Bonjour jean

perl -e "print ucfirst('éonjour émilié'),$/;"
éonjour émilié

Free Ukraine!

Hors ligne

#4 Le 01/10/2010, à 20:18

sputnick

Re : [Résolu / PERL] Accent avec la fonction ucwords (gestion de l'UTF8)

Right, so :

perl -e 'use encoding qw[ utf8 ]; print ucfirst("émilié"),$/;'

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 01/10/2010, à 20:21

luigifab

Re : [Résolu / PERL] Accent avec la fonction ucwords (gestion de l'UTF8)

use encoding qw[utf8];

Yeah tongue

À ajouter au début de chaque fichier PERL.
Merci beaucoup sputnick.


Free Ukraine!

Hors ligne

#6 Le 01/10/2010, à 21:00

sputnick

Re : [Résolu / PERL] Accent avec la fonction ucwords (gestion de l'UTF8)

C'est ce que je fais perso via vim et skeleton:

#!/usr/bin/env perl
# ------------------------------------------------------------------------------
#    made by sputnick in da FreAkY lAb (c) 2010
#    gilles.quenot <AT> gmail <DOT> com
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of version 2 of the GNU General Public
#    License published by the Free Software Foundation.
# ------------------------------------------------------------------------------
#                                        ,,_
#                                       o"  )@
#                                        ''''
#------------------------------------------------------------------------------#
#                    V e r s i o n   i n f o r m a t i o n                     #
#------------------------------------------------------------------------------#
# $Id::                                                                     $: #
# $Revision::                                                               $: #
# $Author::                                                                 $: #
# $Date::                                                                   $: #
# $Hash::                                                                   $: #
#------------------------------------------------------------------------------#
#             E n d   o f   v e r s i o n   i n f o r m a t i o n              #
#------------------------------------------------------------------------------#

# vim:ts=4:sw=4

our $version = 0.0;

use strict;
use warnings;
use encoding qw[ utf8 ];

if ((defined(@ARGV)) && ($ARGV[0] eq '-v')) {
    print ("$0 $version\n");
    exit(0);
}

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#7 Le 15/03/2011, à 21:21

luigifab

Re : [Résolu / PERL] Accent avec la fonction ucwords (gestion de l'UTF8)

Afin de pouvoir utiliser ExifTool correctement, j'ai du supprimer la ligne magique pour la remplacer par : use utf8;.
Le fait que maintenant, ma fonction ucwords ne fonctionne plus, ne m'étonne même pas.

Aurais-tu une solution magique 2 ?


Free Ukraine!

Hors ligne

#8 Le 16/03/2011, à 00:39

sputnick

Re : [Résolu / PERL] Accent avec la fonction ucwords (gestion de l'UTF8)

perldoc

encode

Exemple à adapter selon les cas :

perl -MEncode -e 'print encode("utf8", decode("iso-8859-1", "été"));'

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#9 Le 16/03/2011, à 20:14

luigifab

Re : [Résolu / PERL] Accent avec la fonction ucwords (gestion de l'UTF8)

Je viens de regarder plus en détails la gestion de l'UTF8 avec PERL.
J'ai pas bien compris pourquoi c'est autant la loose, mais après quelques bricolages foireux, j'ai trouvé une solution.

use open(IO => ':encoding(utf8)');
binmode(STDERR, ':utf8');
binmode(STDOUT, ':utf8');
binmode(STDIN, ':utf8');

open(FILE, '>:utf8', '/tmp/azerty');

Pour le moment, avec ce code, j'ai de l'UTF8 à tous les niveaux.
ExifTool n'est pas affecté, et continu à fonctionner.


Free Ukraine!

Hors ligne