我希望能够匹配一些国际化字符的 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
模式可以吗?
最佳答案
TL;DR:使用 Tornado 的内置路由器是不可能的。
Tornado 将处理程序模式的正则表达式编译埋藏得非常深,所以@stema 关于使用 re.Unicode
标志的建议很困难,因为尚不清楚将标志传递到哪里。有两种方法可以解决该特定问题:子类化 URLSpec
并覆盖 __init__
函数,或者在模式中放置标志前缀。
第一个选项需要大量工作。第二个选项利用了 Python 的 re
模块中的一个特性,其中模式可以在模式的开头指定 (?u)
而不是传入 re .UNICODE
标志作为参数。
不幸的是,这两个选项都不起作用,因为 Tornado 会在 将其百分比解码为 unicode 字符串之前将模式与请求 URL 进行匹配。因此,使用 Unicode 标志编译模式没有任何效果,因为您匹配的是百分比编码的 ASCII URL,而不是 Unicode 字符串。
关于python - Tornado 请求处理程序映射到国际字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17775259/