this issue को संबोधित करने का प्रयास कर रहा है, मैं पाइथन मानक लाइब्रेरी में विभिन्न कार्यों के चारों ओर अपने सिर को लपेटने की कोशिश कर रहा हूं जिसका उद्देश्य RFC 2231 का समर्थन करना है। आरएफसी का मुख्य उद्देश्य तीन गुना प्रतीत होता है: किसी दिए गए मान की भाषा को ध्यान में रखते हुए, हेडर पैरामीटर में गैर-ASCII एन्कोडिंग की अनुमति देता है, और हेडर पैरामीटर को एकाधिक लाइनों को फैलाने की इजाजत देता है। email.util
library इस के विभिन्न पहलुओं से निपटने के लिए कई कार्य प्रदान करता है। जहाँ तक मेरा बता सकते हैं, वे इस प्रकार काम करते हैं:डीएफसी आरएफसी 2231 हेडर
decode_rfc2231
केवल, अपने हिस्से में इस तरह के एक पैरामीटर का मान विभाजन इस तरह:
>>> email.utils.decode_rfc2231("utf-8''T%C3%A4st.txt")
['utf-8', '', 'T%C3%A4st.txt']
decode_params
RFC2231 एन्कोड मानकों का पता लगाने का ख्याल रखता है। यह उन हिस्सों को एकत्र करता है जो एक साथ हैं, और एक बाइट अनुक्रम में यूआरएल-एन्कोडेड स्ट्रिंग को भी डीकोड करते हैं। हालांकि, इस बाइट अनुक्रम को लैटिन 1 के रूप में एन्कोड किया गया है। और सभी मूल्य उद्धरण चिह्नों में संलग्न हैं। इसके अलावा, पहले तर्क के लिए कुछ विशेष हैंडलिंग है, जो अभी भी दो तत्वों का एक गुच्छा होना है, लेकिन उन दोनों को संशोधन के बिना परिणाम में पारित किया गया है।
>>> email.utils.decode_params([
... (1,2),
... ("foo","bar"),
... ("name*","utf-8''T%C3%A4st.txt"),
... ("baz*0","two"),("baz*1","-part")])
[(1, 2), ('foo', '"bar"'), ('baz', '"two-part"'), ('name', ('utf-8', '', '"Täst.txt"'))]
collapse_rfc2231_value
एक उचित यूनिकोड स्ट्रिंग में एन्कोडिंग, भाषा और बाइट क्रम के इस ट्रिपल कन्वर्ट करने के लिए इस्तेमाल किया जा सकता। हालांकि, मुझे उलझन में क्या तथ्य है कि अगर इनपुट इतना ट्रिपल था, तो उद्धरण आउटपुट पर ले जाया जाएगा। यदि, दूसरी तरफ, इनपुट एक उद्धृत स्ट्रिंग था, तो इन उद्धरणों को हटा दिया जाएगा।
>>> [(k, email.utils.collapse_rfc2231_value(v)) for k, v in
... email.utils.decode_params([
... (1,2),
... ("foo","bar"),
... ("name*","utf-8''T%C3%A4st.txt"),
... ("baz*0","two"),("baz*1","-part")])[1:]]
[('foo', 'bar'), ('baz', 'two-part'), ('name', '"Täst.txt"')]
तो ऐसा लगता है कि इस सब मशीनरी का उपयोग करने के, मैं किसी भी टपल मैं मुठभेड़ चाहते हैं के तीसरे तत्व गंदें शब्द बोलना के लिए अभी तक एक और कदम जोड़ने के लिए होगा। क्या यह सच है, या क्या मुझे यहां कुछ बिंदु याद आ रही है? मुझे स्रोत कोड से सहायता के साथ उपर्युक्त में से कुछ को समझना पड़ा, क्योंकि दस्तावेज़ विवरण पर थोड़ा अस्पष्ट हैं। मैं कल्पना नहीं कर सकता कि इस चुनिंदा निर्विवाद के पीछे क्या बिंदु हो सकता है। क्या इसका कोई मुद्दा है?
इन कार्यों का उपयोग करने के तरीके पर सबसे अच्छा संदर्भ क्या है?
अब तक का सबसे अच्छा पाया गया है email.message.Message
implementation। वहाँ, इस प्रक्रिया को मोटे तौर पर एक ऊपर उल्लिखित प्रतीत हो रहा है, लेकिन हर क्षेत्र decode_params
के बाद _unquotevalue
के माध्यम से गैर उद्धृत हो जाता है, और केवल get_filename
और get_boundary
पतन उनके मूल्यों, अन्य सभी को एक टपल बजाय वापस जाएँ। मुझे आशा है कि कुछ और उपयोगी होगा।
नहीं एक जवाब है, लेकिन हम RFC 2231 के बारे में एक लंबे चर्चा है कि किसी अन्य रूप में आप के लिए उपयोगी हो सकता है के लिए किया था सवाल। यह फार्म फ़ील्ड के बारे में था, हालांकि। - http://stackoverflow.com/questions/20591599/why-arent-post-names-with-unicode-sent-correctly-when-using-multipart-form-data/20592910#20592910 –
@RobStarling: धन्यवाद! आरएफसी 2231 [मुझे कुछ समय के लिए परेशान कर रहा है] (http://stackoverflow.com/q/13514713/1468366), खासकर जब से [किसी ने इंगित किया] [https://github.com/facebook/tornado/pull/ 869 # मुद्दा-23632083) कि [HTML5 को फ़ाइल नामों के लिए * इसका उपयोग नहीं करना चाहिए] (http://www.w3.org/html/wg/drafts/html/master/forms.html#multipart-form-data) । लेकिन एचटीएमएल 5 अभी तक मानक नहीं है ... – MvG
ओह महान। एचटीएमएल 5 लोग HTTP tweaking कर रहे हैं? ओह। –