3

などの国際化された文字の URL 要求を照合できるようにしたいと考えています/Comisión。これは私のセットアップです:

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [ 
            '''some handlers, and then this: '''
            (r"/([\w\:\,]+)", InternationalizedHandler)
            ]
            tornado.web.Application.__init__(self, handlers, **settings)

しかし、Tornado でロケールを設定することは正しい解決策ではないようです。é、å、µなどの文字をキャッチするように正規表現を設定するにはどうすればよいですか? Pythonでモードを変更するとreどうなりますか?

4

2 に答える 2

3

TL;DR: Tornado の内蔵ルーターでは不可能です。

re.UnicodeTornado は、ハンドラー パターンの正規表現コンパイルをかなり深く埋めているため、フラグをどこに渡すかがすぐには明確ではないため、フラグを使用するという @stema の提案は困難です。この特定の問題に取り組むには 2 つの方法があります。関数をサブクラス化URLSpecしてオーバーライドする__init__か、パターンにフラグ プレフィックスを配置します。

最初のオプションは多くの作業です。2 番目のオプションは、フラグをパラメーターとして渡す代わりに、パターンがパターンの先頭で指定できるPython のreモジュールの機能を利用します。(?u)re.UNICODE

残念ながら、どちらのオプションも機能しません。Tornado はリクエスト URL に対してパターンを照合してから、Unicode 文字列パーセント デコードするためです。したがって、Unicode フラグを使用してパターンをコンパイルしても効果はありません。Unicode 文字列ではなく、パーセントでエンコードされた ASCII URL に対して照合しているためです。

于 2013-07-22T16:13:43.500 に答える
1

ここを見ると、式の「意味」がわかります: http://regex101.com/r/zO9zC8

を一致させたい場合はé,å,µ、 の逆数を一致させる必要がありa-zA-Z0-9ます[^a-zA-Z0-9]\w以前の使用方法\Wと同様に、 と同じものを使用することもできます[^\w]

幸運を!

編集:質問を読み直して、代わりに@stemasの回答に従うことをお勧めします。

于 2013-07-21T18:32:28.980 に答える