Как работать с недопустимыми последовательностями UTF-8 в данных из внешнего файла / внешней команды, какие данные используются для генерации HTML (в веб-приложении Perl)?
В настоящее время я запускаю to_utf8()
на каждом фрагменте данных; Эта подпрограмма обнаруживает, что данные являются недействительными UTF-8, и возвращается к кодировке 'latin1':
use utf8;
use Encoding;
binmode STDOUT, ':utf8';
sub to_utf8 {
my $str = shift;
return undef unless defined $str;
if (utf8::valid($str)) {
utf8::decode($str);
return $str;
} else {
return decode($fallback_encoding, $str, Encode::FB_DEFAULT);
}
}
Пожалуйста, исправьте меня, если этот код неверен.
(фрагмент) рекомендуемой установки в Perl Unicode Essentials из Материалы Тома Кристиансена для OSCON 2011 - это
use utf8;
use open qw( :encoding(UTF-8) :std );
Как получить что-то похожее на то, что у меня есть, используя что-то вроде выше? Я бы предпочел автоматическую обработку Unicode, а не помнить, чтобы пометить все выходные строки из внешних команд и файлов с помощью to_utf8 ().
Данные взяты из внешних файлов или выводятся из внешних команд, и они должны быть в UTF-8, но из-за ошибок пользователя иногда не совпадают.