سلاسل الوعي بيثون من HTTP
سؤال
لدي سلسلة من رأس HTTP، ولكن تم هربها .. ما هي وظيفة يمكنني استخدامها لتشغيله؟
myemail%40gmail.com -> myemail@gmail.com
سوف urllib.unquote () يكون الطريق للذهاب؟
المحلول
أنا متأكد من أن أوريليب unquote
هي الطريقة الشائعة للقيام بذلك.
>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'myemail@gmail.com'
هناك ايضا unquote_plus
:
مثل Unquote ()، ولكن يستبدل أيضا علامات Plus بواسطة المسافات، كما هو مطلوب لقيم نموذج HTML غير المستمر.
نصائح أخرى
نعم، يبدو ذلك urllib.unquote()
ينجز هذه المهمة. (أنا اختبارها ضد مثالك على Codepad.)
في بيثون 3، هذه الوظائف هي urllib.parse.unquote
و urllib.parse.unquote_plus
.
يستخدم الأخير في سبيل المثال للحصول على سلاسل الاستعلام في عناوين URL HTTP، حيث الأحرف المسافة () ترميز تقليديا مثل شخصية زائد (
+
)، و ال +
هو في المئة المشفر ل %2B
.
بالإضافة إلى هذه هناك unquote_to_bytes
الذي يحول السلسلة المشفرة المعينة إلى bytes
, ، والتي يمكن استخدامها عند الترميز غير معروف أو البيانات المشفرة هي البيانات الثنائية. ومع ذلك لا يوجد unquote_plus_to_bytes
, ، إذا كنت في حاجة إليها، يمكنك القيام به:
def unquote_plus_to_bytes(s):
if isinstance(s, bytes):
s = s.replace(b'+', b' ')
else:
s = s.replace('+', ' ')
return unquote_to_bytes(s)
مزيد من المعلومات حول ما إذا كان للاستخدام unquote
أو unquote_plus
متاح في URL ترميز حرف الفضاء: + أو٪ 20.