使用Perl以UTF-8模式写入文件

时间:2017-09-23 06:55:52

标签: perl

我需要在Perl中用UTF-8模式编写一个文件。我该如何创造呢?

在这种情况下,任何人都可以提供帮助吗?

我试着这样做,找到我的下面代码,

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

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

创建一个UTF-8格式的文件。但我需要确定是否从这个脚本发生了这种情况。因为如果我在不使用utf8编码的情况下编写文件,文件内容将自动采用UTF-8格式。

1 个答案:

答案 0 :(得分:6)

你想要

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

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

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

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";

注意:

  • 您想要的编码是utf-8(不区分大小写),而不是utf8(特定于Perl的编码)。
  • 不要使用全球变量;使用词汇(my)vars。
  • 如果你不做编码指令,你可能会很幸运并得到正确的输出(以及一个"宽字符"警告)。不要指望这一点。你永远不会幸运。

    # 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