2017-10-12 42 views
8
import locale 
prefered_encoding = locale.getpreferredencoding() 
prefered_encoding 'ANSI_X3.4-1968' 

मैं एक रूपरेखा inginious कहा जाता है का उपयोग कर रहा है और यह अपने टेम्पलेट रेंडर करने के लिए web.py उपयोग कर रहा है का उपयोग कर।python3 डिफ़ॉल्ट एन्कोडिंग UnicodeDecodeError ascii अपाचे WSGI

web.template.render(os.path.join(root_path, dir_path), 
            globals=self._template_globals, 
            base=layout_path) 

प्रतिपादन काम करता है मेरे स्थानीय होस्ट पर लेकिन मेरे मचान सर्वर पर नहीं

वे दोनों python3 चलाते हैं। मुझे लगता है कि web.py लागू करता utf-8

को Python2 में एन्कोडिंग केवल (है कि मेरे हाथ से बाहर है) पर

def __str__(self): 
    self._prepare_body() 
    if PY2: 
     return self["__body__"].encode('utf-8') 
    else: 
     return self["__body__"] 

यहाँ स्टैक ट्रेस

t = self._template(name), 
File "/lib/python3.5/site-packages/web/template.py", line 1028, in _template, 
self._cache[name] = self._load_template(name), 
File "/lib/python3.5/site-packages/web/template.py", line 1016, in _load_template 
return Template(open(path).read(), filename=path, **self._keywords) 
File "/lib64/python3.5/encodings/ascii.py", line 26, in decode 
return codecs.ascii_decode(input, self.errors)[0] 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 83: ordinal not in range(128), 

मेरे एचटीएमएल hebew वर्ण शामिल हैं , छोटे उदाहरण

<div class="modal-content"> 
        <div class="modal-header"> 
         <button type="button" class="close" data-dismiss="modal">&times;</button> 
         <h4 class="modal-title feedback-modal-title"> 
          חישוב האיברים הראשונים בסדרה של איבר ראשון חיובי ויחס שלילי: 
          <span class="red-text">אי הצלחה</span> 

और मैं इसे इस तरह खोलता हूं:

open('/path/to/feedback.html').read() 

और जहां रेखा एन्कोडिंग विफल होती है वह है जहां हिब्रू वर्ण हैं। centos

उपयोगकर्ता सरल ढांचे python3.5 साइट-संकुल के तहत एक pip के रूप में स्थापित किया गया है के तहत

export PYTHONIOENCODING=utf8 
export LC_ALL=en_US.UTF-8 
export LANG=en_US.UTF-8 
export LANGUAGE=en_US.UTF-8 

:

मैं ~/.bashrc में कुछ वातावरण चर की स्थापना की कोशिश की। और यह उपयोगकर्ता के तहत एक अपाचे सर्वर के द्वारा संचालित apache

(अनुप्रयोग के init के दौरान) कोड में वातावरण चर की स्थापना ताकि अपाचे WSGI उनकी जानकारी

import os 
os.environ['LC_ALL'] = 'en_US.UTF-8' 
os.environ['LANG'] = 'en_US.UTF-8' 
os.environ['LANGUAGE'] = 'en_US.UTF-8' 

मेरे पास हो जाएगा की कोशिश की संपादित /etc/httpd/conf/httpd.confsetenv विधि का उपयोग कर:

SetEnv LC_ALL en_US.UTF-8 
SetEnv LANG en_US.UTF-8 
SetEnv LANGUAGE en_US.UTF-8 
SetEnv PYTHONIOENCODING utf8 

और sudo service httpd restart और फिर भी प्रयास विफल का उपयोग कर पुन: प्रारंभ।

मेरा सवाल है, इसे हल करने का सबसे अच्छा अभ्यास क्या है। मैं समझता हूं कि इसके लिए हैक्स हैं, लेकिन मैं समझना चाहता हूं कि अंडरलाइन कारण क्या है और साथ ही इसे कैसे हल किया जाए।

धन्यवाद!

+0

'ANSI_X3.4-1968' ==' ASCII'। –

+0

आपको हमें यह दिखाने की आवश्यकता होगी कि ट्रेसबैक क्या है और इसे पुन: उत्पन्न कैसे करें। –

+0

मैंने स्टैकट्रैक और कुछ और कोड जोड़ा है, लेकिन पुन: उत्पन्न करने के लिए, आपको सरल फ्रेमवर्क स्थापित करना होगा, जो एक मान्य सुझाव नहीं है, इसलिए मेरा सबसे अच्छा विकल्प प्रश्न का वर्णन करना है – WebQube

उत्तर

2

अंत में जब

import codecs 
with codecs.open(file_path,'r',encoding='utf8') as f: 
    text = f.read() 

करने के लिए फ़ाइल

open('/path/to/feedback.html').read() 

से बदल पढ़ने जवाब मिल गया है, तो किसी को भी एक अधिक सामान्य दृष्टिकोण है कि काम करेंगे है, मैं उसके जवाब को स्वीकार करेंगे

1

एक पायथन 2 + 3 समाधान होगा:

import io 

with io.open(file_path, mode='r', encoding='utf8') as f: 
    text = f.read() 

io.open के दस्तावेज़ीकरण देखें।

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