The HTML::Parser can parse Unicode strings when running under perl-5.8 or better. If Unicode is passed to $p->parse() then chunks of Unicode will be reported to the handlers. The offset and length argspecs will also report their position in terms of characters.
ずいぶん前のエントリで HTML::Parser にバグがあり UTF8 な文字列が化ける ということを書きましたが、Changes を確認したところ、ここ最近の変更で Perl 5.8 以降を使っている場合に限りバグが解消されたような様子です。