You fixed it , or you didn't fix it. I would recommend to check the version of CGI.pm with command like this.
perl -MCGI -e 'print $CGI::VERSION'
From Character Encodings in Perl, which moritz sometimes cites for unicode issue.
Special care must be taken when reading POST or GET parameters with the function param in the module CGI. Older versions (prior to 3.29) always returned byte strings, newer version return text strings if charset("UTF-8") has been called before, and byte strings otherwise.
So, it is possible that you use older version of CGI.pm. And one day someone upgrade CGI.pm, you will be in trouble.
Sometimes, older module has different behavior for decoding. I stumbled with older LWP::Simple and these troubles really embarrass me.