2017-09-23 1 views
1

Je dois écrire un fichier avec le mode UTF-8 en Perl. Comment puis-je créer cela?Écrire un fichier en mode UTF-8 en utilisant Perl

Quelqu'un peut-il aider dans ce cas?

Je suis en train comme ça, Trouver mon code ci-dessous,

use utf8; 
use open ':encoding(utf8)'; 
binmode(FH, ":utf32"); 

open(FH, ">test11.txt"); 
print FH "something Çirçös"; 

Il est la création d'un fichier au format UTF-8. Mais je dois m'assurer que cela arrive de ce script. Parce que si j'écris un fichier sans utiliser utf8 encoder également, le contenu du fichier prend automatiquement en format UTF-8.

+0

n'a pas de sens à binmode un glob qui ne dispose pas d'une poignée ouverte. – ikegami

Répondre

5

Vous voulez

use utf8;      # Source code is encoded using UTF-8. 

open(my $FH, ">:encoding(utf-8)", "test11.txt") 
    or die $!; 

print $FH "something Çirçös"; 

ou

use utf8;      # Source code is encoded using UTF-8. 
use open ':encoding(utf-8)'; # Sets the default encoding for handles opened in scope. 

open(my $FH, ">", "test11.txt") 
    or die $!; 

print $FH "something Çirçös"; 

Notes:

  • L'encodage que vous voulez est utf-8 (insensible à la casse), non utf8.
  • N'utilisez pas de variables globales; utilisez les variables lexicales (my).
  • Si vous laissez l'instruction de coder, vous pourriez avoir de la chance et obtenir la bonne sortie (avec un avertissement "caractère large"). Ne comptez pas là-dessus. Tu n'auras pas toujours de la chance.

    # Unlucky. 
    $ perl -we'use utf8; print "é"' | od -t x1 
    0000000 e9 
    0000001 
    
    # Lucky. 
    $ perl -we'use utf8; print "é♡"' | od -t x1 
    Wide character in print at -e line 1. 
    0000000 c3 a9 e2 99 a1 
    0000005 
    
    # Correct. 
    $ perl -we'use utf8; binmode STDOUT, ":encoding(utf-8)"; print "é♡"' | od -t x1 
    0000000 c3 a9 e2 99 a1 
    0000005 
    
+0

Merci pour la clarification. –