قم بفك تشفير رأس البريد الإلكتروني UTF8
سؤال
لدي موضوع البريد الإلكتروني للنموذج:
=?utf-8?B?T3.....?=
نص البريد الإلكتروني مشفر بـ utf-8 base64 - وتم فك تشفيره بشكل جيد.أنا حاليًا أستخدم وحدة Perl's Email::MIME لفك تشفير البريد الإلكتروني.
ما معنى محدد =?utf-8 وكيف يمكنني استخراج المعلومات من هذه السلسلة؟
المحلول
ال encoded-word
الرموز (حسب آر إف سي 2047) يمكن أن يحدث في قيم بعض الرؤوس.ويتم تحليلها على النحو التالي:
=?<charset>?<encoding>?<data>?=
مجموعة الأحرف هي UTF-8 في هذه الحالة، الترميز هو B
مما يعني base64 (الخيار الآخر هو Q
وهو ما يعني مقتبس للطباعة).
لقراءتها، قم أولاً بفك تشفير base64، ثم تعامل معها كأحرف UTF-8.
اقرأ أيضًا طلبات RFC المتنوعة لبريد الإنترنت للحصول على مزيد من التفاصيل، بشكل أساسي آر إف سي 2047.
وبما أنك تستخدم لغة بيرل، ترميز::MIME::Header يمكن أن تكون ذات فائدة:
ملخص
use Encode qw/encode decode/; $utf8 = decode('MIME-Header', $header); $header = encode('MIME-Header', $utf8);
خلاصة
هذه الوحدة تنفذ ترميز رأس MIME RFC 2047.هناك 3 أسماء ترميز متغير.Mime-Header ، MIME-B و MIME-Q.الفرق الموصوف أدناه
decode() encode() MIME-Header Both B and Q =?UTF-8?B?....?= MIME-B B only; Q croaks =?UTF-8?B?....?= MIME-Q Q only; B croaks =?UTF-8?Q?....?=
نصائح أخرى
أعتقد أن وحدة التشفير تتعامل مع ذلك باستخدام ملف MIME-Header
الترميز، لذا جرب هذا:
use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);
الدفع RFC2047.يعني الحرف "B" أن الجزء الموجود بين الحرفين الأخيرين "؟" مشفر بالأساس 64.يعني "utf-8" بطبيعة الحال أنه يجب تفسير البيانات التي تم فك تشفيرها على أنها UTF-8.
التمثيل الصامت::كلمات من أدوات MIME تعمل بشكل جيد أيضًا لهذا الغرض.لقد واجهت بعض المشكلات مع Encode ووجدت أن MIME::Words نجح في بعض السلاسل التي لم ينجح فيها Encode.
use MIME::Words qw(:all);
$decoded = decode_mimewords(
'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);
يعد هذا امتدادًا قياسيًا لتصنيف مجموعة الأحرف للرؤوس، المحددة في RFC2047.