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

apacheのWSGIを使用してUnicodeDecodeErrorアスキー。私はlocalhost上の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を実行します。私は私のhtmlのスタックトレースが

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

ここ

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

(それは私の手からだ)web.pyのみPython2にutf-8

のエンコーディングを強制していることがわかり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() 

そして、エンコーディングが失敗する行は、ヘブライ文字がどこにあるかです。

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' 

apache

が(アプリの初期化中)コード内の環境変数を設定しようとしたユーザーでApacheサーバで提供しました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

Python 2 + 3ソリューションは次のようになります。

import io 

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

io.openの文書を参照してください。

関連する問題

 関連する問題