• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl print文で日本語表示するには)

perl print文で日本語表示するには

このQ&Aのポイント
  • perlのプログラムで、use utf8が宣言されていない時は、print文で日本語が正しく表示されるが、use utf8が宣言されている時は、print文で日本語が正しく表示されないかエラーになる。
  • encode('utf-8', $string)やencode('cp932', $string)を試してみたがうまくいかなかった。
  • 解決方法は不明。

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.3

#!C:/perl/bin/perl use strict; use utf8; use Encode; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; my $string=$year."年".$mon."月".$mday."日 ".$hour."時".$min."分".$sec."秒\n"; print encode('cp932', $string); 実行結果 2018年12月26日 11時41分43秒 $year年 という変数名だと思っているのでしょう。

yam2012
質問者

お礼

この方法は質問する前に試していたのですが その時はうまくいきませんでした。 しかし、今、実行してみると エラーは出ず日本語が正しく表示されています。 最初、この原因がよく分からなかったのですが、 上記のコードを、No2の回答者様の回答のように、 「Shift+JIS」で保存するとエラーになり、 「UTF8」で保存すると日本語が正しく表示される ことがわかりました。 つまり、「UTF8」で保存しておかなければならない問題と、 変数名の後に日本語が続くと、変数名と日本語の全体が 1つの変数として解釈されてしまう問題の 2つの問題があったようです。 ありがとうございました。

その他の回答 (2)

回答No.2

>どのようにすればよいでしょうか。 use utf8のプラグマは「プログラムのソースコード内の文字列の漢字はUTF8で記述されてますよ」というプラグマです。 なのでuse utf8と宣言したソースコードは「UTF8で保存」しないとならない。 もし、ソースコードをシフトJISやEUCで記述・保存してあるのであれば my $string="$year年$mon月$mday日 $hour時$min分$sec秒\n"; の行の「年」や「月」や「日」などの漢字部分は「UTF8の漢字コードじゃないのが理由で正しく解釈できない」ので、エラーになります。 test2.plを「UTF8」で保存して、実行してみて下さい。

yam2012
質問者

お礼

回答ありがとうございます。 その前に一部訂正があります。 No.1の回答者様の補足コメント入力欄に書いてありますので ご確認ください。 > test2.plを「UTF8」で保存して、実行してみて下さい。 test2.plを「UTF8」で保存して実行してみました。 コマンドプロンプトに直接表示した場合は、 日本語の部分が文字化けしていますが、 リダイレクト(perl test2.pl > test.txt 2>&1)すると UTF8形式のファイルが生成されて文字化けはしていませんが、 結果は変更前と同じ(NG)でした。 print $string; print encode('utf-8', $string); print encode('cp932', $string); どれも変更前と同じ結果(NG)になります。 よろしくお願いします。

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

encode('Shift_JIS', $string); でどうですか?

yam2012
質問者

お礼

回答ありがとうございます。 encode('Shift_JIS', $string); にして実行してみましたが全く同じ結果(NG)になります。 よろしくお願いします。

yam2012
質問者

補足

一部訂正があります。 「print $string;」のPC1の実行結果のみが、 今、実行してみると、以下のようになっていました。 -------------------------------------- Passing malformed UTF-8 to "_Perl_IDCont" is deprecated at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDStart" is deprecated at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected continuation byte 0x94, with no preceding start byte) at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDCont" is deprecated at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDStart" is deprecated at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected continuation byte 0x8c, with no preceding start byte) at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected continuation byte 0x8e, with no preceding start byte) at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDCont" is deprecated at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDStart" is deprecated at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected continuation byte 0x93, with no preceding start byte) at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected non-continuation byte 0x20, immediately after start byte 0xfa) at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDCont" is deprecated at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDStart" is deprecated at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected continuation byte 0x8e, with no preceding start byte) at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected continuation byte 0x9e, with no preceding start byte) at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDCont" is deprecated at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDStart" is deprecated at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected continuation byte 0x95, with no preceding start byte) at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected continuation byte 0xaa, with no preceding start byte) at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDCont" is deprecated at D:\test\test2.pl line 8. Passing malformed UTF-8 to "_Perl_IDStart" is deprecated at D:\test\test2.pl line 8. Malformed UTF-8 character (unexpected continuation byte 0x95, with no preceding start byte) at D:\test\test2.pl line 8. 2018 N12 26 11 58 34 b -------------------------------------- よろしくお願いします。