Широкие символы и кодировка Unicode - PullRequest
1 голос
/ 07 октября 2019

Мой Perl код печатает некоторые данные POST в файл журнала.

Иногда возникает следующая ошибка:

Широкий символ при печати в .. .

Я понял, что есть проблема с кодировкой . Поэтому я добавил следующие строки:

use open ':std', ':encoding(UTF-8)';
binmode STDOUT, ':utf8';
binmode STDERR, ':utf8';

Однако тогда ошибка изменилась на другой вид с сообщениями, подобными этому:

"\ xFF" не сопоставляется с Юникодом

Так, как правильно заставить это работать?

1 Ответ

3 голосов
/ 07 октября 2019
use open ':std', ':encoding(UTF-8)';

выполняет следующие действия:

  • Вызывает последующее использование open в той же области, чтобы добавить :encoding(UTF-8), если никакие слои не переданы open.

  • Вызывает выполнение следующего:

    binmode(STDIN,  ':encoding(UTF-8)');
    binmode(STDOUT, ':encoding(UTF-8)');
    binmode(STDERR, ':encoding(UTF-8)');
    

Проблема в том, что STDIN не должен быть декодирован.

Раствор № 1

use open ':std', ':encoding(UTF-8)';
BEGIN { binmode(STDIN); }

Раствор № 2

use open ':encoding(UTF-8)';
BEGIN {
   binmode(STDOUT, ':encoding(UTF-8)');
   binmode(STDERR, ':encoding(UTF-8)');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...