메신저 플랫폼에서 JSON 문서를 가져 와서 $message_text
그리스어 단어와 비교하고 싶습니다 . UTF-8에서 디코딩 한 후 문제는 디코딩이 일어나지 않고 디코딩 전후에 $message_text
동일한 값 ( "\xce\x93\xce\xb5\xce\xb9\xce\xb1"
)이 있다는 것입니다.
use strict;
use warnings 'all';
use JSON;
use Data::Dumper;
use HTTP::Request::Common;
use LWP::UserAgent;
use CGI;
use HTTP::Daemon;
use HTTP::Status;
use Encode qw(decode encode);
use DBI;
use utf8;
use Encode;
my $message_payload;
my $message_sender_id;
sub decode_json_reply{
#Decoding the message we recieved from the messenger
my $json_text = shift;
warn "Callback_Messages_Testa1:".$json_text;
my $message_res = JSON::decode_json($json_text);
my $message_text = $message_res->{entry}[0]->{messaging}[0]->{message}->{text};
$message_sender_id = $message_res->{entry}[0]->{messaging}[0]->{sender}->{id};
my $message_recipient_id = $message_res->{entry}[0]->{messaging}[0]->{recipient}->{id};
$message_payload = $message_res->{entry}[0]->{messaging}[0]->{postback}->{payload};
my $message_watermark = $message_res->{entry}[0]->{messaging}[0]->{delivery}->{watermark};
$message_text = Encode::decode_utf8($message_text);
if("Γεια" eq $message_text){
warn "DONE-GREEK";
}
}
이것은 메신저 플랫폼에서 돌아 오는 json입니다.
{"object":"page","entry":[{"id":"434218046923911","time":1494249616799,"messaging":[{"sender":{"id":"1184989524957707"},"recipient":{"id":"434218046923911"},"timestamp":1494249616387,"message":{"mid":"mid.$cAAGK6wcXaFtiGXz8A1b6DJt38to5","seq":667346,"text":"\\u0393\\u03b5\\u03b9\\u03b1"}}]}]}
<%
my $query = $Request->BinaryRead();
decode_json_reply($query);
%>
당신이해야 할 use utf8
내용이 UTF = 8로 인코딩 된 것을 말 파일의 상단에
문자열을 eq
, not 과 비교 =
해야하며 use warnings 'all'
이와 같은 오류를 경고하기 위해 추가해야 합니다.
UTF-8 데이터를 인쇄하려면 문자로 작업하고 UTF-8을 사용하도록 출력 스트림을 설정해야합니다.use open qw/ :std :encoding(utf8) /
Perl의 내부 문자열 인코딩은 UTF-8을 기반으로하므로 UTF로 인코딩 된 바이트와 인코딩되지 않은 Perl 문자의 출력간에 차이가 없습니다.
다음은 올바른 결과를 제공하는 코드 버전입니다. 로깅 프로세스가 손상된 원본 데이터라고 생각하는 것을 사용했습니다. 이 코드와 자신의 코드 사이의 차이점을 발견 할 수 있다면 문제를 찾은 것입니다.
use utf8;
use strict;
use warnings 'all';
use feature 'say';
use JSON 'decode_json';
my $json_text = q<{"object":"page","entry":[{"id":"434218046923911","time":1494253318253,"messaging":[{"sender":{"id":"1184989524957707"},"recipient":{"id":"434218046923911"},"timestamp":1494253317826,"message":{"mid":"mid.$cAAGK6wcXaFtiGbV2wlb6GrnuFJAh","seq":667376,"text":"\u0393\u03b5\u03b9\u03b1"}}]}]}>;
my $message_res = decode_json( $json_text );
my $message_text;
for ( $message_res->{entry}[0]{messaging}[0] ) {
$message_text = $_->{message}{text};
}
say "DONE-GREEK3" if $message_text eq "Γεια";
DONE-GREEK3
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다