怎么将16进制转为UTF8字符?

参考了别人的:
use Encode;
$text="\xA4";
$text =~ s/[^\x01-\x7F]/pack("U", ord($&))/sgie;
print "$text\n";
$text = encode("utf8", $text);#需要用这个吗?
print $text;
有的可以转为可以显示的,如\xA4,则显示两个¤。
但有的就不行,如 \xC2..
不知道为什么,有达人请指教下吗?另外,超过256的怎么转呢?我曾经碰到\xC2\A9.这样的怎么弄?