Django भंडार unicode
स्ट्रिंग का उपयोग कोड अंक और आगे की प्रक्रिया के लिए यूनिकोड के रूप में स्ट्रिंग को पहचानती है। यूटीएफ -8 चार 8-बिट बाइट्स एन्कोडिंग का उपयोग करता है, इसलिए unicode
स्ट्रिंग जिसका उपयोग Django द्वारा किया जा रहा है, किसी बिंदु पर कोड बिंदु नोटेशन से इसके यूटीएफ -8 नोटेशन में डीकोड या व्याख्या की जानी चाहिए। आलैंड द्वीप समूह के मामले में, ऐसा होने वाला प्रतीत होता है कि यह यूटीएफ -8 बाइट एन्कोडिंग ले रहा है और इसे स्ट्रिंग को परिवर्तित करने के लिए कोड पॉइंट के रूप में व्याख्या करता है।
स्ट्रिंग django_countries रिटर्न u'\xc5land Islands'
है जहां \xc5
Å का यूटीएफ कोड पॉइंट नोटेशन है। यूटीएफ -8 बाइट नोटेशन में \xc5
\xc3\x85
बन जाता है जहां प्रत्येक नंबर \xc3
और \x85
एक 8-बिट बाइट है। देखें: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xc5&mode=hex
या आप उपयोग कर सकते हैं country_label = fields.Country (form.cleaned_data.get ('देश') [0: 2])। Name.encode ('utf-8') u'\xc5land Islands'
से लिए जाने के लिए '\xc3\x85land Islands'
आप तो प्रत्येक बाइट लेते हैं और उन्हें कोड अंक के रूप में उपयोग करते हैं, आप इसे आप इन पात्रों दे देंगे देखेंगे: Ã…
देखें: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=xc3&mode=hex और: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=x85&mode=hex
देखें कोड के HTML अंकन के साथ टुकड़ा ये पात्र
<div id="test">Ã…Å</div>
तो मेरा अनुमान है कि आप आप आवेदन में 2 अलग एनकोडिंग की है। एक तरीका यह u'\xc5land Islands'
u'\xc3\x85land Islands'
करने से प्राप्त करने के लिए UTF-8 में एक utf-8 पर्यावरण एनकोड जो '\xc3\x85'
को u'\xc5'
बदल जाएगा और उसके बाद iso-8859
से unicode
को डिकोड जो u'\xc3\x85land Islands'
देना होगा में होगा। लेकिन चूंकि यह आपके द्वारा प्रदान किए जा रहे कोड में नहीं है, इसलिए मुझे लगता है कि यह country_label
सेट करने के पल के बीच कहीं और हो रहा है और जिस समय आपका आउटपुट ठीक से प्रदर्शित नहीं होता है। या तो स्वचालित रूप से एन्कोडिंग सेटिंग्स के कारण, या किसी स्पष्ट असाइनमेंट के माध्यम से कहीं भी।
पहले संपादन:
, एप्लिकेशन आपके लिए एन्कोडिंग सेट करने के लिए अपने टेम्पलेट की अपनी py फ़ाइल और <meta charset="UTF-8">
के शीर्ष पर # -*- coding: utf-8 -*-
जोड़ें। और एक django.utils.functional से यूनिकोड स्ट्रिंग प्राप्त करने के लिए। प्रॉक्सी ऑब्जेक्ट आप unicode()
पर कॉल कर सकते हैं।
country_label = unicode(fields.Country(form.cleaned_data.get('country')[0:2]).name)
दूसरा संपादित:
एक अन्य यह पता लगाने की है, जहां समस्या force_bytes
(https://docs.djangoproject.com/en/1.8/ref/utils/#module-django.utils.encoding) का उपयोग किया जाएगा जिस तरह से इस तरह:
from django.utils.encoding import force_bytes
country_label = fields.Country(form.cleaned_data.get('country')[0:2]).name
forced_country_label = force_bytes(country_label, encoding='utf-8', strings_only=False, errors='strict')
लेकिन आप के बाद से इस तरह सफलता के बिना पहले से ही कई रूपांतरणों की कोशिश की है, शायद समस्या अधिक जटिल है। क्या आप अपना संस्करण django_countries
, Python
और अपनी django ऐप भाषा सेटिंग्स साझा कर सकते हैं? आप जो भी कर सकते हैं वह सीधे आपके djano_countries
पैकेज (जो आपकी पायथन निर्देशिका में होना चाहिए) में देखें, फ़ाइल data.py ढूंढें और यह देखने के लिए इसे खोलें कि यह कैसा दिखता है। शायद डेटा खुद दूषित हो गया है।
दोनों समाधान काम नहीं करते हैं। दूसरा एक अपवाद देता है। ' – Maverick