संस्करण: अजगर 2.7.3अजगर अनुरोध एन्कोडिंग पोस्ट डेटा
अन्य पुस्तकालयों: अजगर-अनुरोध 1.2.3, jinja2 (2,6)
मैं एक स्क्रिप्ट है कि एक मंच करने के लिए डेटा प्रस्तुत किया है और समस्या यह है कि गैर-असीसी पात्र कचरे के रूप में दिखाई देते हैं। उदाहरण के लिए एंड्रे टेचिन जैसे नाम एंड्रै © Tà © chinà © के रूप में बाहर आते हैं।
यहां बताया गया है डेटा प्रस्तुत किया जाता है:
1) डाटा शुरू में तो जैसे एक UTF-8 एन्कोडेड CSV फ़ाइल से भरी हुई है:
entries = []
with codecs.open(filename, 'r', 'utf-8') as f:
for row in unicode_csv_reader(f.readlines()[1:]):
entries.append(dict(zip(csv_header, row)))
unicode_csv_reader अजगर सीएसवी प्रलेखन पेज के नीचे से है: http://docs.python.org/2/library/csv.html
जब मैं दुभाषिया में प्रविष्टियों का नाम टाइप करता हूं, तो मुझे नाम u'Andr\xe9 T\xe9chin\xe9'
के रूप में दिखाई देता है। फिर से वही
tpl = tpl_env.get_template(u'forumpost.html')
rendered = tpl.render(entries=entries)
जब मैं नाम दुभाषिया में गाया टाइप मैं देख रहा हूँ:
2) अगला मैं jinja2 के माध्यम से डाटा प्रस्तुत करना u'Andr\xe9 T\xe9chin\xe9'
अब, अगर मैं गाया चर को लिखने इस तरह की एक फ़ाइल नाम, इसे सही ढंग से प्रदर्शित करता है:
with codecs.open('out.txt', 'a', 'utf-8') as f:
f.write(rendered)
लेकिन मैं इसे मंच करने के लिए भेजना चाहिए:
3) पोस्ट अनुरोध कोड में मेरे पास है:
params = {u'post': rendered}
headers = {u'content-type': u'application/x-www-form-urlencoded'}
session.post(posturl, data=params, headers=headers, cookies=session.cookies)
सत्र एक अनुरोध सत्र है।
और नाम फ़ोरम पोस्ट में टूटा हुआ प्रदर्शित होता है। मैं निम्नलिखित की कोशिश की है:
- हेडर बाहर छोड़ दें
- एनकोड rendered.encode रूप में प्रदान की ('utf-8') (एक ही परिणाम)
- गाया = urllib.quote_plus (गाया) (बाहर के रूप में आता सभी% XY)
अगर मैं टाइप rendered.encode ('utf-8') मैं निम्न देखें:
'Andr\xc3\xa9 T\xc3\xa9chin\xc3\xa9'
मैं कैसे इस मुद्दे को ठीक कर सकता है? धन्यवाद।
unicode(my_string_variable, "utf8")
या डीकोड और इनकोड: UTF8 में डिकोड करने के लिए
"जाँच मुद्दा एक प्रदर्शन शिल्पकृति यानी नहीं है, मूल्य सही है लेकिन यह गलत तरीके से प्रदर्शित करता है "- धन्यवाद। यही समस्या है! दुर्भाग्य से यह एक सार्वजनिक मंच है और मैं डिफ़ॉल्ट एन्कोडिंग नहीं बदल सकता। यह आईएसओ -885 9 -1 एन्कोडिंग के साथ प्रतिक्रिया करता है। क्या मैं rendered.encode ('iso-8859-1') का उपयोग कर सकता हूं या क्या चीजों को तोड़ देगा? धन्यवाद। – TheMagician
शीर्षलेखों में वर्णमाला सेट करने का प्रयास करें – jfs
यह काम नहीं किया। – TheMagician