2010-12-09 10 views
9

मैं जब एक फ़ाइल नाम गैर- ASCII वर्ण युक्त के साथ एक फ़ाइल अपलोड करने की कोशिश Django व्यवस्थापक inlines में एक छवि फ़ाइल अपलोड करने के लिए कोशिश कर रहा हूँ और UnicodeEncodeError हो रही:UnicodeEncodeError जब ImageField बचत Django व्यवस्थापक में गैर- ASCII वर्ण युक्त

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 ArticleAmmin युक्त ArticleAdmin।

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

उत्तर

6

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

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

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

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

+0

धन्यवाद। मैं इसे ठीक से कैसे करूं और सुनिश्चित कर सकता हूं कि यह काम करता है? मैंने इन चरों को जोड़ने के लिए अपना/usr/sbin/envvars संपादित किया है और पायथन लिपि में # - * - कोडिंग है: utf-8 - * - – Andrey

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' 

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

+0

मुझे काम करने से पहले पूरी मशीन को पुनरारंभ करना पड़ा। –

+0

CentOS/रेड हैट अपाचे वातावरण चर के लिए फ़ाइल 'है/etc/sysconfig/httpd' –

0

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

लिनक्स में

:

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 इस डॉक मुझे भी मदद करता है।

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

+1

टिप्पणी डालने से बचने के लिए (" यह मेरे लिए काम किया! ") या पदों में संपर्क जानकारी प्रयास करें! –

संबंधित मुद्दे