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

apache WSGI kullanarak UnicodeDecodeError ascii. Benim localhost üzerindepython3 varsayılan kodlama ben <a href="http://inginious.readthedocs.io" rel="noreferrer">inginious</a> denilen bir çerçeve kullanıyorum ve onun şablonu oluşturmak için <a href="http://webpy.org/" rel="noreferrer">web.py</a> kullanıyor

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

render çalışır ama benim basamak sunucusunda üzerinde değil.

Her ikisi de python3'ü çalıştırır. Burada

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

hebew karakter dahil edebilirim yığın izleme

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), 

Benim html utf-8

Python2 kodlama sadece (benim elimde değil)

üzerine web.py zorlar görüyoruz

ve bunu şöyle açabilirim:

ve kodlamanın başarısız olduğu satır, İbranice karakterlerinin olduğu yerdir.

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

ustaca çerçeve python3.5 site paketleri altında pip olarak yüklenir kullanıcı centos

altında:

ben ~/.bashrc içinde bazı ortam değişkenleri çalıştı. ve kullanıcıya altında bir apache sunucusu tarafından sunulan apache

apache 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' 

Ben bunların farkında olacak şekilde (app init sırasında) kodunda Ortam değişkenlerini ayarlama çalıştı setenv yöntemiyle /etc/httpd/conf/httpd.conf düzenlendi:

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

hala sudo service httpd restart ve şans kullanılarak yeniden başlatılmıştır.

Sorum şu: Bu sorunu çözmek için en iyi uygulama nedir? Bunun için hackler olduğunu anlıyorum, ancak alt çizginin nedenini ve nasıl çözüleceğini anlamak istiyorum.

Teşekkürler!

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

için

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

değiştirildi dosyayı okurken

+0

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

+0

Bize tam olarak geri dönüşün ne olduğunu ve nasıl yeniden üretileceğini göstermeniz gerekir. –

+0

Ben stacktrace ve bazı daha fazla kod ekledim, ama çoğaltmak için, geçerli bir öneri olmayan ustaca çerçeve yüklemek zorundasınız, bu yüzden en iyi seçeneğim iyi soru – WebQube

cevap

2

nihayet herkes çalışacak daha genel bir yaklaşım varsa, ben onun cevabını kabul edeceğiz cevabını buldu

1

Bir Python 2 + 3 çözümü şöyle olurdu:

import io 

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

io.open belgelerine bakın.

İlgili konular