2016-12-17 3 views
1

に異常な文字を表示する私は、データベースから次の文字列を引っ張っ:はHTML

「ライトは、突然、彼は驚くほどよくするのにかかることを...彼はそれに順応到達したら遠から、平凡な存在に押し込まれます。」

これはまさにコンソールに表示されるテキストです。トリプルドットが1文字であることに注意してください。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 383: ordinal not in range(128)

任意のアイデアはどのようにこの問題を解決するために:私は、テンプレートを通じてHTMLにこのデータを渡す際に

は今、私は次のエラーを取得しますか?私は何とかUTF-8にエンコードする必要がありますか?私は私のバックエンドのためにPythonを使用しています。

EDIT

バックエンドのコードは次のとおりです。

print "INFO: ", data[2] 

return render_template('index.html', title=data[1], info=data[2].encode("utf-8"), backdrop=data[4], imdbrat=data[7], rtrat=data[9], cert=data[10], yt=data[11], runtime=data[12]); 

テンプレート(index.htmlの)中で、私が持っている:

<p> {{info}} </p> 

出力は次のとおりです。

INFO: The life of Danny Wright, a salesman forever on the road, veers into dangerous and surreal territory when he wanders into a Mexican bar and meets a mysterious stranger, Julian, who's very likely a hit man. Their meeting sets off a chain of events that will change their lives forever, as Wright is suddenly thrust into a far-from-mundane existence that he takes to surprisingly well … once he gets acclimated to it. 
[2016-12-17 21:06:14,846] ERROR in app: Exception on/[GET] 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1988, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1641, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1544, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1639, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1625, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/home/dennis/moviechoosy/moviechoosy/app.py", line 31, in home 
    return render_template('index.html', title=data[1], info=data[2].encode("utf-8"), backdrop=data[4], imdbrat=data[7], rtrat=data[9], cert=data[10], yt=data[11], runtime=data[12]); 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 383: ordinal not in range(128) 
+0

"奇妙な文字列" .encode( 'utf-8')? – saeleko

+0

これは違いがないようです –

+0

あなたはまだエラーが発生していますか?コードを投稿できますか?私は同様の問題を抱えていましたが、私の答えはそれを解決しましたが、おそらく他の場所でそれを変換する必要があります。 – saeleko

答えて

0

'...'文字は水平の省略記号です。 UTF-8としてエンコード

>>> import unicodedata 
>>> c = unicodedata.lookup('HORIZONTAL ELLIPSIS') 
>>> c 
u'\u2026' 
>>> print c 
… 

、それは0xe2で始まります

>>> b = c.encode('utf-8') 
>>> b 
'\xe2\x80\xa6' 

Flask docsrender_templateに渡されるとき、テンプレートの非ASCII文字列をUnicodeにデコードされるべきであると言います。

utf-8としてエンコードされたデータベースのPython2文字列があるようです。だから、

>>> u = b.decode('utf-8') 

をUnicodeにデコードに必要な、その後、フラスコ/ Jinja2のは、それを正しく処理する必要があります。