/ / Djic व्यवस्थापक में गैर-ASCII वर्ण वाले ImageField को सहेजते समय UnicodeEncode त्रुटि - django, apache, यूनिकोड, django-admin

UnangoodeEncode त्रुटि जब छवि Djield को Django व्यवस्थापक में गैर-ASCII वर्णों को सहेजते हैं - django, apache, यूनिकोड, django-admin

मैं django व्यवस्थापक में एक छवि फ़ाइल अपलोड करने की कोशिश कर रहा हूं और गैर-एसीआई अक्षरों वाले फ़ाइल नाम के साथ फ़ाइल अपलोड करने का प्रयास करते समय यूनिकोडएन्कोड त्रुटि प्राप्त कर रहा हूं:

 File "/usr/local/lib/python2.6/site-packages/django/db/models/fields/files.py", line 92, in save
self.name = self.storage.save(name, content)

File "/usr/local/lib/python2.6/site-packages/django/core/files/storage.py", line 47, in save
name = self.get_available_name(name)

File "/usr/local/lib/python2.6/site-packages/django/core/files/storage.py", line 73, in get_available_name
while self.exists(name):

File "/usr/local/lib/python2.6/site-packages/django/core/files/storage.py", line 196, in exists
return os.path.exists(self.path(name))

File "/usr/local/lib/python2.6/genericpath.py", line 18, in exists
st = os.stat(path)

Django दस्तावेज़ों में इस मुद्दे के बारे में एक अनुच्छेद है: http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror - वे कहते हैं कि मुझे LANG और LC_ALL env चर को परिभाषित करना होगा, साथ ही os.env का उपयोग करके उन्हें परिभाषित करना "टी काम" जीता है। इसलिए मैंने उन्हें अपनी .htaccess फ़ाइल में परिभाषित किया है और मुझे यकीन है कि वे वहां हैं:

META
Variable    Value
CONTENT_LENGTH  "27289"
...
LANG    "en_US.utf-8"
LC_ALL  "en_US.utf-8"
LC_LANG     "en_US.utf-8"

समस्या अभी भी मौजूद है। Django संस्करण 1.2.3 (नवीनतम स्थिर) है, sys.getfilesystemencoding () (जो मुझे लगता है कि इस मुद्दे के लिए प्रासंगिक है) "ANSI_X3.4-1968" देता है।

मॉडल / एडमिन कोड कुछ भी खास नहीं है: ImageField के साथ एक आलेख छवि मॉडल, और ArticleAmmin ArticleAmage युक्त अनुच्छेद।

अद्यतन करें मैं इस मुद्दे को ठीक नहीं कर सका इसलिए मैंने इसका उपयोग छोड़ दिया हैअपाचे सेटअप और runfcgi + nginx का उपयोग कर एप्लिकेशन शुरू किया। अपलोड अब ठीक काम करते हैं लेकिन मैं इसे समाधान के रूप में नहीं जोड़ रहा क्योंकि सवाल अपाचे के बारे में था।

उत्तर:

उत्तर № 1 के लिए 7

डेबियन (लेनी) पर आप बस निम्नलिखित दो पंक्तियां जोड़ते हैं /etc/apache2/envvars:

export LANG="en_GB.utf-8"
export LC_ALL="en_GB.utf-8"

... वह यूके वेब सर्वर के लिए है। अमेरिका के लिए:

export LANG="en_US.utf-8"
export LC_ALL="en_US.utf-8"

और अपाचे को पुनरारंभ करें।


जवाब के लिए 6 № 2

आपको पूरे अपाचे 2 पर्यावरण के लिए LANG और LC_ALL को परिभाषित करने का प्रयास करना चाहिए।

मेरे तैनाती के लिए मैं यह भी सुनिश्चित करता हूं कि पायथन डिफ़ॉल्ट सिस्टम एन्कोडिंग utf-8 पर भी सेट है।

पायथन डिफ़ॉल्ट एन्कोडिंग के लिए मैं आमतौर पर sitecustomize.py बना / संपादित करता हूं, देखें http://blog.ianbicking.org/illusive-setdefaultencoding.html

अपाचे के लिए - init स्क्रिप्ट में लाइन है/etc/init.d/apache2 (उबंटू 8.04 एलटीएस) जो पर्यावरण बनाता है। मैंने सही एलसी_ओएल, LANG जोड़ा। असल में यह सभी ओएस के लिए कहीं भी सर्वर init स्क्रिप्ट में होना चाहिए।


जवाब के लिए 0 № 3

आप ऐसा कर सकते हैं।

लिनक्स में:

echo $LANG   i got zh_CN.utf-8

apache2 / envvars में

export LANG="zh_CN.utf-8"  #keep this variable like echo $LANG.
export LC_ALL="zh_CN.utf-8" #the same.

https://docs.djangoproject.com/en/1.4/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror यह डॉक्टर भी मेरी मदद करता है।

मुझे लगता है कि यह ओएस और अपाचे समस्या है!