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

Langage Perl Discussion :

Soucie de transcodage utf-8 vers utf-16LE


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut Soucie de transcodage utf-8 vers utf-16LE
    J'ai une applie qui doit insérer des données dans une base SQL, les tables sont au format utf-16LE, j'ai donc utilisé cette méthode pour le trancodage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    use Unicode::String qw(utf16le);
    Unicode::String->stringify_as('utf16le');
     
    my $utf16 = utf16($var_en_utf8);
    J'utilise correctement Unicode::String masi j'ai quelques fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [Mon Jan  8 20:51:54 2007] index.pl: byteswap argument #1 not long enough at G:/Program Files/Perl/lib/Unicode/String.pm line 213.
    [Mon Jan  8 20:51:54 2007] index.pl: Uneven UTF16 data at G:/Program Files/Perl/lib/Unicode/String.pm line 196.
    Ma chaine utf-8 est en utf-8 strict, donc je ne comprend pas trop quel est le problème

  2. #2
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut
    après re lecture de la doc du module sur CPAN il semble que j'ai un problème de byteswap(), il me faut utiliser byteswap2( $str, ... ) le problème c'est que je vois pas quoi mettre dedans

    merci de votre aide parce que la je suis un peu beaucoup largué

  3. #3
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut
    Bon après avoir fait un tour dans les snippets j'ai compris mon erreur pour convertire de utf8 a utf16le il faut utiliser Unicode::String comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    use Unicode::String qw(utf8 utf16le);
    Unicode::String->stringify_as('utf16le');
     
    $var = utf8($var);
    vala le snippets :
    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
     
    #!/usr/bin/perl -w
     
    use strict; 
    use Unicode::String;
     
    ###########################################
    #
    #	2UTF8.pl
    #	________
    #
    #Pour la conversion de fichiers ISO-8859-1
    #vers UTF-8
    #INPUT : un fichier ASCII ISO-8859-1
    #OUTPUT : un fichier ASCII UTF-8
    ###########################################
     
    Unicode::String->stringify_as('utf8');
    my($file) = $ARGV[0];
    my($file_dest) = $file.".new";
    open FILE, "< $file" or die "$!\n";
    open FILE2, "> $file_dest" or die "$!\n";
    while(<FILE>){
    	$_ = Unicode::String::latin1($_);
    	print FILE2 $_;
    }
    close FILE and close FILE2;
    unlink $file;
    rename($file_dest, $file);
    unlink $file_dest;
    mais voila j'ai un tout dernier soucie , utf8() me dit que mes chaines utf-8 ne sont pas bonne j'utilise pourtant Encode comme sa :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       unless ( $Charset =~ /utf8|utf-8/i ) {
           if ( $Charset ne "not_found" ) {
             $data->{'_content'} = encode("utf-8-strict", decode($Charset, $data->{'_content'}, Encode::FB_WARN));
           }
             else {
             $data->{'_content'} = encode("utf-8-strict", $data->{'_content'}, Encode::FB_WARN);
           }
       }

Discussions similaires

  1. [PHP 5.3] Convertir un fichier de UTF-16 vers UTF-8
    Par alainyvan dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2014, 20h52
  2. [WD17] Conversion d'un fichier plat encoder en UTF-16LE vers UTF-8
    Par nokwih dans le forum WinDev
    Réponses: 1
    Dernier message: 21/05/2013, 10h47
  3. Réponses: 1
    Dernier message: 05/12/2006, 16h54
  4. conversion iso-8859-1 vers utf-8
    Par gorgonite dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/08/2006, 12h49
  5. Conversion vers UTF-8
    Par magnus2005 dans le forum Langage
    Réponses: 1
    Dernier message: 26/10/2005, 10h12

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