PerlIO::utf8_strict#
A UTF-8 I/O layer that refuses malformed input.
:utf8_strict decodes UTF-8 like :encoding(UTF-8), much faster, and like it unlike :utf8 it validates: a read that meets an ill-formed sequence, a surrogate, a non-shortest form, a code point beyond U+10FFFF or a noncharacter dies. Writing through it encodes as :utf8 does.
Synopsis#
open my $fh, '<:utf8_strict', $file or die $!;
my $line = <$fh>; # dies on malformed UTF-8
open my $lax, '<:utf8_strict(allow_noncharacters)', $file or die $!;
binmode STDOUT, ':utf8_strict';
Options#
A comma-separated list in parentheses relaxes the check: allow_surrogates, allow_noncharacters, allow_nonshortest, or loose for all three; strict, the default, for none. An unknown word dies with Unknown argument to :utf8_strict.
The errors are Can't decode ill-formed UTF-8 octet sequence <..>, with the bytes in hex and at end of file when the input ends inside a sequence, and Can't interchange noncharacter code point U+... The handle’s error flag is set as well.
This is a native implementation of PerlIO::utf8_strict 0.010’s utf8_strict.xs; its PerlIO/utf8_strict.pm is used unchanged, and perl loads it by itself the first time :utf8_strict is named.
Differences from upstream#
None.