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;
但这只处理法语。我还需要处理冰岛语和斯洛伐克语。
不是为更多扩展的拉丁字符添加类似的行,而是为(几乎)任何语言处理此问题的正确方法是什么?
答案 0 :(得分:4)
包含UTF-8十六进制代码的传入电子邮件
格式为quoted printable。
您应该使用旨在解析电子邮件的Perl模块来处理它。例如MIME::Parser
或Email::MIME
。
在将原始数据转换为字符串之前,您需要在某个阶段使用它(如您的示例所示)。
这会将数据解析为UTF-8。然后,您应该将UTF-8数据发送到浏览器。没有必要尝试将每个非ASCII字符转换为命名字符实体:自世纪之交以来,我们对UTF-8有了很好的支持。