Широкий символ в IO :: Socket :: INET send - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь отправить текст с помощью IO :: Socket :: INET вот мой код:

my $socket = new IO::Socket::INET(PeerAddr => $IP,
                     PeerPort => $Port,
                     Proto => 'udp',
                     Timeout => 1) or die 'Could not create socket: $!';
        
        $socket->send($text) or die "Send UDP packet error: $!";

, но у меня есть некоторые символы, отличные от utf-8, в тексте, который я отправляю, затем Я получаю это сообщение. Есть идеи, как это исправить?

Wide character in send at C:/Strawberry/perl/lib/IO/Socket.pm

1 Ответ

1 голос
/ 20 июня 2020

Сокеты - это поток байтов, а не поток символов. Это означает, что вам нужно кодировать строку символов в байты. Возможны различные кодировки символов, но обычно используется UTF-8 , где один символ представлен чем-то от одного до шести байтов (один байт для ASCII et c).

 use Encode 'encode';
 my $bytes = encode('UTF-8', $text);
 $socket->send($bytes);

Обратите внимание, что вам нужно сделать обратное на стороне получателя, если вы хотите вернуть символы из байтов, т.е. использовать Encode::decode.

См. Также соответствующие части в документации, особенно в perlunifaq части о том, когда кодировать и что происходит, если вы не кодируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...