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

아파치 WSGI를 사용하여 UnicodeDecodeError 아스키. 내 로컬 호스트에python3 기본 인코딩 내가 <a href="http://inginious.readthedocs.io" rel="noreferrer">inginious</a>라는 프레임 워크를 사용하고 있는데 그 템플릿을 렌더링하는 <a href="http://webpy.org/" rel="noreferrer">web.py</a>을 사용하고

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

렌더링 작동하지만 내 준비 서버없습니다.

둘 다 python3을 실행합니다. 여기

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

이 hebew 문자를 포함 할 스택 추적

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

내 HTML입니다 utf-8

Python2의 인코딩에만 (즉 내 손에서의)

에 web.py가 시행 볼 작은 예제

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

그리고 인코딩이 실패한 행은 히브리어 문자가있는 곳입니다.

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

독창적 인 프레임 워크는 python3.5 사이트 - 패키지 아래 pip로 설치 한 사용자 centos

아래 :

나는 ~/.bashrc 일부 환경 변수를 설정했습니다. 그리고 그것은 사용자로 아파치 서버에서 제공 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' 

내가 가진 그들의 인식 될 수 있도록 (응용 프로그램의 초기화시) 코드에서 환경 변수를 설정 시도 setenv 방법을 사용하여 /etc/httpd/conf/httpd.conf 편집 :

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과 행운을 사용하여 다시 시작됩니다.

제 질문은이 문제를 해결하는 가장 좋은 방법입니다. 이 문제에 대한 해킹이 있다는 것을 알고 있지만 밑줄이 무엇인지 이해하고 문제를 해결하는 방법을 알고 싶습니다.

감사합니다.

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

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

변경 파일 을 읽을 때

+0

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

+0

추적 표시가 무엇이고 복제하는 방법을 정확히 보여줘야합니다. –

+0

stacktrace와 몇 가지 코드를 추가했습니다.하지만 재현하려면 유효한 제안이 아닌 독창적 인 프레임 워크를 설치해야합니다. 따라서 가장 좋은 옵션은 질문을 잘 설명하는 것입니다. – WebQube

답변

2

마침내 누군가가 작동하는 일반적인 방법이 있다면, 나는 그의 대답을 받아 들일 것입니다 해답을 발견

1

파이썬 2 + 3 솔루션은 다음과 같습니다 :

import io 

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

io.open의 설명서를 참조하십시오.