Perl: декодирование "искаженных" строк Юникода - PullRequest
4 голосов
/ 28 сентября 2011

Я работаю над CGI-скриптом, который вызывается из части программного обеспечения (которую я не могу изменить).Переменные, представленные программным обеспечением, вызывают у меня проблемы, потому что, если они содержат символы, отличные от ascii, они выглядят так:

ÿFFFFDEetta er texti meÿFFFFF0 ÿFFFFEDslenskum stÿFFFFF6fum

вместо

Þetta er texti með íslenskum stöfum,

Я пытался связываться с функцией Encode::decode, но ничего не вышло - все, что мне удалось сделать, это изменить представление ÿ.

Так что даЯ немного озадачен.Что я делаю, чтобы изменить все ÿFFFFDE s на Þ s и т. Д., Не прибегая к замене каждого символа, не являющегося ascii, по отдельности (что не является решением, поскольку это должно работать для языков, на которых я даже не говорю)

1 Ответ

7 голосов
/ 28 сентября 2011
use Encode qw(decode);
use Encode::Escape qw();

$_ = 'ÿFFFFDEetta er texti meÿFFFFF0 ÿFFFFEDslenskum stÿFFFFF6fum';
s/ÿFFFF/\\x/g;
decode('iso-8859-1', decode('unicode-escape', $_));
# returns 'Þetta er texti með íslenskum stöfum'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...