我有一封 SMTP 电子邮件,它是日文的,有些是英文的。电子邮件的主题以 UTF-8、base64 编码。
主题:=?UTF-8?B?5Y2K5bCO5L2T6KO96YCg6KOF572u44OX44Os44OT44Ol44O844OO44O8?= =?UTF-8?B?44OIIDog5b6M5bel56iL44Oh44O844Kr44O844GM5by344GE?=
我如何检测这是否是日文/中文并将其解码为日文/中文。
我可以在 Perl/Java/Python 中实现这一点吗?
这里有两个步骤。首先解码标题:
如果您有电子邮件,请使用高级电子邮件解析器,例如Courriel。subject
访问者将返回解码的主题。
如果您只有字符串,请使用Encode::MIME::Header:
use Encode qw(decode);
decode 'MIME-Header', 'Subject: =?UTF-8?B?5Y2K5bCO5L2T6KO96YCg6KOF572u44OX44Os44OT44Ol44O844OO44O8?= =?UTF-8?B?44OIIDog5b6M5bel56iL44Oh44O844Kr44O844GM5by344GE?='
__END__
Subject: 半導体製造装置プレビューノート : 後工程メーカーが強い
第二步是找出语言。作为人类,我已经可以看出这是日本人。假名字符是线索,它们只出现在日语写作中。如果这就是您所需要的,那么如果字符串匹配\p{Kana}
,它可能是日语。
对于更通用的解决方案,您可以使用语言检测库,例如Lingua::Identify ::CLD、Lingua::Ident、Lingua::Lid、Lingua::YALI、WebService::Google::Language。
使用 Java,您需要一个库来将 Base 64 字符串解码为二进制,例如apache codec。
然后是直截了当的:
byte[] b = Base64.decodeBase64("5Y2K5bCO5L2T6KO96YCg6KOF572u44OX44Os44OT44Ol44O844OO44O8");
String s = new String(b, "UTF-8");
System.out.println(s);
它打印:(半導体製造装置プレビューノー
我不知道这意味着什么,但它确实看起来像日语)。