私には、UTF-8文字を含む文字列フィールドinput
を持つクラスがあります。私のクラスもメソッドtoString
を持っています。私はクラスのインスタンスをメソッドtoString
を使ってファイルに保存したいと思います。問題は奇妙なシンボルがファイルに書き込まれているということです。ファイルに書き込むときに奇妙に表示されるキリル記号
my $dest = "output.txt";
print "\nBefore saving to file\n" . $message->toString() . "\n";
open (my $fh, '>>:encoding(UTF-8)', $dest)
or die "Cannot open $dest : $!";
lock($fh);
print $fh $message->toString();
unlock($fh);
close $fh;
最初の印刷が正常に動作します
Input: {"paramkey":"message","paramvalue":"здравейте"}
は、コンソールに出力されています。私は、ファイルに書き込むときに問題がある:
Input: {"paramkey":"message","paramvalue":"здÑавейÑе"}
私は、ファイルのロックを解除/ロックするためflock
を使用しました。
'$ message'オブジェクトはどのクラスに属していますか? – MarcoS
印刷するための 'binmode'はどうでしょうか – ssr1012
*「文字列フィールドにはutf-8文字を含むクラスがあります」*あなたの' input'フィールドはエンコードされるべきではありません。デコードとエンコーディングは、コードを文字単位で扱えるように、入力と出力で行う必要があります。 – Borodin