Perlで日本語をふくむデータをJson出力すると文字化けが起こります。
色々解決法をためしましたが、直りません。どこがおかしいんでしょうか?
perl
1 2#!/usr/bin/perl 3 4print "Content-Type: text/html; \n\n"; 5 6# use module 7use Data::Dumper; 8use Time::Local; 9use DateTime; 10use JSON; 11use utf8; 12use Encode; 13use URI::Escape; 14 15use strict; 16use warnings; 17 18my $data; 19#get data from unity 20if ($ENV{'REQUEST_METHOD'} eq 'POST') 21{ 22 read(STDIN, $data, $ENV{'CONTENT_LENGTH'}); 23} #end of if 24else 25{ 26 $data = $ENV{'QUERY_STRING'}; 27}#end of else 28 29my $message; 30my $client_number; 31(my $message_tag,$message, my $client_number_tag, $client_number) = split(/=|&/,$data); 32 33 34$message = uri_unescape($message); 35 36my $file_name = "message.json"; 37if(! -e $file_name) #ファイルがなければ、UTF8文字コードのjsonファイル作成 38{ 39 open my $fh,">", $file_name 40 or die "$file_name error $!"; 41 close $fh; 42} 43 44my $dt = DateTime->now( time_zone=>'local');#現時刻取得 45my $ymdhms = $dt->datetime; 46 47my $json; #jsonファイルから全てのメッセージデータを取得 48{ 49 local $/; #Enable 'slurp' mode 50 open my $fh,"<", $file_name; 51 $json = <$fh>; 52 close $fh; 53} 54 55 56my @array = (); 57 58if($json){ 59 60my $json_in = decode_json($json); ##新しいメッセージを現在のメッセージデータの最後に追加するために存在するデータをあらかじめ配列に入れておく(Jsonファイルに新しいデータを追加するのはどうやったらいいのかわかっていない....) 61 62 foreach my $item( @$json_in) { 63 push @array, $item; 64 65 } 66} 67 68#新メッセージ 69my $new_data = { 70 'message' => $message, 71 'date' => $ymdhms, 72 'client_number' => $client_number 73 }; 74 75 76 push @array, $new_data;#過去のすべてのメッセージが入っている配列に追加 77 78 my $json_out = encode_json (\@array); #配列をJson化する 79 80 open my $fh, ">", $file_name 81 or die "$file_name error $!"; 82 print $fh $json_out ; 83 close $fh; 84 85 print ("Success"); 86 87exit;
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/21 11:06
2018/05/21 14:50
2018/05/22 08:14
2018/05/22 12:42
2018/05/22 19:41
2018/05/23 06:34
2018/05/24 07:03