I have plenty experience with mismatching character encodings, and I agree that it can be hard to track down.
First of all, where does your source document come from? Which factors determine its encoding?
Ultimately the best course of action is to ensure that you're using utf8 everywhere (and advertising that to the viewing programs). You can tell the web browser that your content is in utf8 by sending an additional "charset" header attribute like this:
use CGI;
my $cgi = CGI->new;
...
print $cgi->header(-type=>'text/html', -charset=>'utf-8');
You can do the same for emails, by giving them the appropriate MIME headers:
Content-Type: text/plain; charset="utf-8"
How you do that depends on how your email-sending code is designed.
I'd like to point out that in recent perls (version 5.8), under most circumstances, strings are encoded internally as utf8. So it makes sense to be consistent about that in the rest of your application.