簡體   English   中英

Curl工作正常,但是Perl LWP無法將Unicode代碼發布到HTTPS服務器

[英]Curl works fine but Perl LWP failed to post Unicode code to HTTPS server

我的以下代碼段(使用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";
}

有什么建議么? 謝謝!

之前,您沒有編碼。 現在,您進行了雙重編碼。 encode_json已經在處理JSON的編碼,因此也不要手動進行!

如果提供12個字符\測\試 ,它將收到12個字符\測\試

如果提供兩個字符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 = "測試";
  • 等等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM