Удалить широкие символы, Perl - PullRequest
5 голосов
/ 07 октября 2011

Я пытаюсь отправить строку через сокет, используя программу perl.Я получаю сообщение о том, что текст содержит широкий символ, и сокет не может с этим справиться.Есть ли способ:

A: включить широкие символы через сокет

или

B: удалить все широкие символы из строки?

Ответы [ 2 ]

11 голосов
/ 07 октября 2011

Это означает, что вы пытаетесь отправить текст через дескриптор, но дескрипторы могут передавать только байты.Вам нужно сериализовать текст в байты.В частности, вы хотите кодировать текст.Вы можете использовать Кодировать encode функцию

print $sock encode('some_encoding', $text);

или вы можете поручить сокету сделать это для вас

binmode $sock, ':encoding(some_encoding)';  # once
print $sock $text;

Заменить some_encoding накодировка, ожидаемая другим концом сокета (например, UTF-8).

0 голосов
/ 07 октября 2011

PerlIO и binmode могут помочь вам решить ваши проблемы

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