Это не очень хорошо сформулированный вопрос. Вы не сказали нам, откуда приходит ваша функция decode_entities()
, и вы не дали простой пример, который мы могли бы просто запустить, чтобы воспроизвести вашу проблему.
Но я был в состоянии воспроизвести проблему с этим кодом:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use HTML::Entities;
say decode_entities('a 3.9 kΩ resistor and a 5 µF capacitor');
Проблема здесь состоит в том, что по умолчанию, Perl интерпретирует исходный код (и, следовательно, любые строки, включенные в нее), как ISO -8859-1. Поскольку ваша строка находится в UTF8, вам просто нужно указать Perl интерпретировать исходный код как UTF8, добавив use utf8
к вашему коду.
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use utf8; # Added this line
use HTML::Entities;
say decode_entities('a 3.9 kΩ resistor and a 5 µF capacitor');
Выполнение этого задания даст вам правильную строку, но вы также получите предупреждение.
Широкий характер, скажет
Это потому, что слой IO Perl ожидает однобайтовые символов по умолчанию, и любой попытке отправить многобайтный персонажу через это рассматривается как потенциальная проблема. Вы можете исправить это, указав Perl, что STDOUT должен принимать символы UTF8. Есть много способов сделать это. Проще всего, вероятно, добавить -CS
к линии shebang.
#!/usr/bin/perl -CS
use strict;
use warnings;
use 5.010;
use utf8;
use HTML::Entities;
say decode_entities('a 3.9 kΩ resistor and a 5 µF capacitor');
У Perl есть большая поддержка Unicode, но с этим может быть сложно начать работу. Я рекомендую прочитать perlunitut, чтобы узнать, как все это работает.
Это сработало для меня, спасибо. Я отвечу, когда смогу, через несколько минут. Как ни странно, когда я теперь запускаю 'url_encode ($ string)' позже в скрипте, теперь я получаю предупреждение «широкий символ». Но я полагаю, что это совершенно новый вопрос. –
@Hello World: Попробуйте url_encode_utf8(). знак равно – HoldOffHunger