如何将UTF-8十六进制代码转换为HTML(perl)?

时间:2017-08-07 13:56:55

标签: perl

Perl脚本正在处理包含UTF-8十六进制代码的传入电子邮件,并将其转换为html。

示例:

Input: c=C3=A9d=C3=A9
HTML: cédé
Should be displayed as: cédé

我快速管理了这个:

$message_text =~ s/=C3=80/À/g;
$message_text =~ s/=C3=81/Á/g;
$message_text =~ s/=C3=82/Â/g;
$message_text =~ s/=C3=87/Ç/g;
$message_text =~ s/=C3=88/È/g;
$message_text =~ s/=C3=89/É/g;
$message_text =~ s/=C3=8A/Ê/g;
$message_text =~ s/=C3=8B/Ë/g;
$message_text =~ s/=C3=8E/Î/g;
$message_text =~ s/=C3=8F/Ï/g;
$message_text =~ s/=C3=A0/à/g;
$message_text =~ s/=C3=A1/á/g;
$message_text =~ s/=C3=A2/â/g;
$message_text =~ s/=C3=A7/ç/g;
$message_text =~ s/=C3=A8/è/g;
$message_text =~ s/=C3=A9/é/g;
$message_text =~ s/=C3=AA/ê/g;
$message_text =~ s/=C3=AB/ë/g;
$message_text =~ s/=C3=AE/î/g;
$message_text =~ s/=C3=AF/ï/g;

但这只处理法语。我还需要处理冰岛语和斯洛伐克语。

不是为更多扩展的拉丁字符添加类似的行,而是为(几乎)任何语言处理此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

  

包含UTF-8十六进制代码的传入电子邮件

格式为quoted printable

您应该使用旨在解析电子邮件的Perl模块来处理它。例如MIME::ParserEmail::MIME

在将原始数据转换为字符串之前,您需要在某个阶段使用它(如您的示例所示)。

这会将数据解析为UTF-8。然后,您应该将UTF-8数据发送到浏览器。没有必要尝试将每个非ASCII字符转换为命名字符实体:自世纪之交以来,我们对UTF-8有了很好的支持。