【发布时间】:2017-10-06 13:03:16
【问题描述】:
我正在从信使平台获取一个 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);
%>
【问题讨论】:
-
我知道我也使用过 eq 但同样的问题。这也是我从信使平台获取的 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"}}]}]}
-
似乎没有,但是当我警告 $message_text 它给了我 utf-8 符号 \xce\x93\xce\xb5\xce\xb9\xce\xb1
-
它是从错误日志中复制粘贴,json 很好,我用英文字符测试过
-
你输入的是什么意思??我给你json。
-
您显示的数据不是有效的 JSON,
JSON模块不会解析它。请使用use Data::Dumper; $Data::Dumper::Useqq = 1; $Data::Dumper::Terse = 1; print Dumper $json_text;从 Perl 中转储$json_text并向我们展示它的输出。