2017-09-23 8 views
1

PerlでUTF-8モードのファイルを書く必要があります。どのように私はそれを作成するのですか?Perlを使ってUTF-8モードでファイルを書き込む

この場合、誰でも助けてもらえますか?

私はそれはUTF-8形式のファイルを作成しています

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

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

、私の次のコードを検索し、このようにしようとしています。しかし、私はそれがこのスクリプトから起こっているかどうかを確認する必要があります。なぜなら、もし私がutf8を使わずにファイルを書いていれば、ファイルの内容は自動的にUTF-8形式になります。

+0

オープンハンドルを持っていないグロブをBINMODEしても意味がありません。 – ikegami

答えて

5

あなたはノート

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です。
  • グローバル変数を使用しないでください。レキシカル(my)ヴァースを使用してください。
  • エンコードの指示を忘れると、幸運なことになり、適切な出力が得られます(「ワイド文字」の警告とともに)。これを信じてはいけません。あなたはいつも幸運ではありません。

    # 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

説明をありがとうございます。 –

関連する問題