That indicates a scalar which become corrupted when Perl or XS code improperly decoded a string.
For example, use utf8; doesn't validate if the source code is actually valid UTF-8, and produces corrupt scalars if it's not.
$ not_utf8="$( printf "\x96" )" $ perl -e"use utf8; q{$not_utf8}" Malformed UTF-8 character: \x96 (unexpected continuation byte 0x96, wi +th no preceding start byte) at -e line 1. Malformed UTF-8 character (fatal) at -e line 1.
(Fortunately, use utf8; catches the problem and bails.)
Are you using use utf8; with a source file that isn't encoded using UTF-8?
The likely culprit is a U+2013 EN DASH ("–") encoded using cp1252.
Using the :utf8 encoding layer can also produce corrupt scalars.
$ printf "\x96" | perl -nle' use open ":std", ":utf8"; printf "%vX\n", $_; ' Malformed UTF-8 character: \x96 (unexpected continuation byte 0x96, wi +th no preceding start byte) in printf at -e line 1, <> line 1. 0
That's why :encoding(UTF-8) should be used instead.
In reply to Re: Malformed UTF-8 character
by ikegami
in thread Malformed UTF-8 character
by BillKSmith
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |