如下所示,使用curl我可以将Unicode字符串发送到服务器 推送后,将消息通知我的手机,正确显示手机上的汉字。
curl "https://oapi.dingtalk.com/robot/send?access_token=$ACCESS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {
"content": "\u6d4b\u8bd5",
}}'
但是当我使用Perl LWP库将相同的内容发送到服务器时, 我只有6d4b8bd5显示在应用程序上。 我试图使用tcpdump来比较curl和LWP发送缓冲区之间的差异,但是由于它是https服务器,因此无法正常工作。
#!/usr/bin/perl -w
use strict;
use warnings;
use Cpanel::JSON::XS qw( encode_json );
# Create a user agent object
use LWP::UserAgent;
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
my $ua = LWP::UserAgent->new;
$ua->agent("curl/7.47.0");
# Create a request
my $req = HTTP::Request->new(POST => 'https://oapi.dingtalk.com/robot/send?access_token=bf47148ea6a1b125395f9313873ac508');
$req->content_type('application/json;charset=utf-8');
my $var='\u6d4b\u8bd5';
my $message = encode_json({ msgtype => "text", text => { content => $var } });
$req->content($message);
# Pass request to the user agent and get a response back
my $res = $ua->request($req);
# Check the outcome of the response
if ($res->is_success) {
print $res->content;
} else {
print $res->status_line, "n";
}
有什么建议吗?谢谢!
答案 0 :(得分:2)
之前,您没有编码。现在,您进行了双重编码。 encode_json
已经在处理JSON的编码,因此也不要手动进行!
如果提供12个字符\u6d4b\u8bd5
,它将收到12个字符\u6d4b\u8bd5
。
如果提供两个字符U + 6D4B和U + 8BD5,它将收到两个字符U + 6D4B和U + 8BD5。
my $var = chr(0x6D4B) . chr(0x8BD5);
my $var = "\x{6D4B}\x{8BD5}";
my $var = "\N{U+6D4B}\N{U+8BD5}";
use utf8; my $var = "测试";