=pod I often see people (including myself) write code like this: utf8::encode($data_to_print) if utf8::is_utf8($data_to_print); This results in irritating bugs, because it's incorrect and doesn't even make sense. Perl can store text as either latin-1 or utf8 internally. For a string like C<ほげ>, the internal representation will be utf8, because you definitely can't represent Japanese in latin-1. However (and this is where problems crop up), something like C<ü> (written as C<"\xfc">) will be represented as latin-1, even if you C. This is not something that should concern you, but when you check C, you've just made Perl's internals your problem. You want to convert to utf8 regardless of the internal representation, but your code only converts if the string is already utf8. If the string isn't utf8, you're saying you I want to convert it? What!? The key is to drop the if condition. Always C to utf8 if you want utf8! print {$the_web_browser} Encode::encode('utf8', $some_string); Please stop checking C. Fuck the internal representation!