5

HTML ページを UTF-8 でエンコードされた Web ブラウザーに送信したいと考えています。ただし、次の例は失敗します。

from wsgiref.simple_server import make_server

def app(environ, start_response):
    output = "<html><body><p>Räksmörgås</p></body></html>".encode('utf-8')
    start_response('200 OK', [
        ('Content-Type', 'text/html'),
        ('Content-Length', str(len(output))),
    ])
    return output

port = 8000
httpd = make_server('', port, app)
print("Serving on", port)
httpd.serve_forever()

トレースバックは次のとおりです。

Serving on 8000
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/wsgiref/handlers.py", line 75, in run
    self.finish_response()
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/wsgiref/handlers.py", line 116, in finish_response
    self.write(data)
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/wsgiref/handlers.py", line 202, in write
    "write() argument must be a string or bytes"

エンコーディングを削除して単純に python 3 Unicode 文字列を返すと、wsgiref サーバーはブラウザがリクエスト ヘッダーで指定する文字セットでエンコードされているように見えます。ただし、すべての WSGI サーバーが同じことをするとは思えないので、この制御を自分で行いたいと考えています。UTF-8 でエンコードされた HTML ページを返すにはどうすればよいですか?

ありがとう!

4

3 に答える 3

5

ページをリストとして返す必要があります。

def app(environ, start_response):
    output = "<html><body><p>Räksmörgås</p></body></html>".encode('utf-8')
    start_response('200 OK', [
        ('Content-Type', 'text/html; charset=utf-8'),
        ('Content-Length', str(len(output)))
    ])

    return [output]

WSGI はそのように設計されているためyield、HTML だけを (完全または部分的に) 表示できます。

于 2010-01-31T22:32:25.883 に答える
0

編集

vim /usr/lib/python2.7/site.py

encoding = "ascii" # Default value set by _PyUnicode_Init()

encoding = "utf-8"

再起動システム

para forcar o python 2.7 a trabalhar com utf-8 como padrão pois o mod_wsgi busca a codificacao padrao do python que antes era ascii com no maximo 128 caracteres!

于 2013-12-19T16:39:10.383 に答える