I suspect one of two reasons for the differences: ...
Neither of those is the case.
I've verified (by sending the request through a proxy) that the content is sent UTF-8 encoded (i.e. no %-encoding). And my Encode::decode also behaves normally (i.e. it would die with "Cannot decode string with wide characters"). This is, however, irrelevant, because CGI.pm has code to prevent double-decoding:
sub _decode_utf8 {
my ($self, $val) = @_;
if (Encode::is_utf8($val)) {
return $val;
}
else {
return Encode::decode(utf8 => $val);
}
}
This sufficiently explains the behavior I observed and reported (for the input side).
|