2016-04-12 2 views
2

У меня есть приложение внешнего окна, вызывающее скрипт PERL со строкой, содержащей . Я пытаюсь обнаружить каждый такой экземпляр и заменить его на &.Как заменить на & perl?

Я пытался использовать все из них, но ничего не работает:

$line =~ s/\uFFFD/&/g; 
$line =~ s/&#65533/&/g; 
$line =~ s/\x{fffd}/&/g; 
$line =~ s/\xfffd/&/g; 
+4

Просьба представить вывод 'использования Data :: Dumper; {local $ Data :: Dumper :: Useqq = 1; предупредить (Dumper ($ ул)); } ' – ikegami

+2

Если у вас был персонаж FFFD, третий работал бы. – ikegami

+2

@Pedro Lobito, Этот символ используется для обозначения чего-то недействительного. Помещение чего-то недействительного в исходный код является плохим выбором. – ikegami

ответ

0

Как Ikegami отметил в своем комментарии, третье решение ($line =~ s/\x{fffd}/&/g;) является правильным. Если это не сработает, одно из ваших предположений должно быть неправильным. Мне приходят две возможности:

  • Ваш вход не содержит фактического Unicode replacement character. Это может быть так, что ваш редактор делает другую последовательность байтов таким же образом. Вы можете проверить его, запустив hexdump -c. Если ваш вход закодирован в UTF-8 (учитывайте разницу между UTF8 и Unicode), вы должны увидеть следующую последовательность: 357 277 275.
  • Вы не сообщили perl о кодировке входного текста. Perl предполагает, что это однобайтная кодировка, и поэтому регулярное выражение, содержащее многобайтовый символ, никогда не будет соответствовать. Пожалуйста, сравните следующее:

    echo ' ' | Perl -pe 's/\ х {FFFD}/& /'

    эхо '' | Perl -CS -pe 's/\ х {FFFD}/& /'

    &

Смежные вопросы