python - Tornado 请求处理程序映射到国际字符

标签 python regex unicode tornado

我希望能够匹配一些国际化字符的 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 会在 将其百分比解码为 un​​icode 字符串之前将模式与请求 URL 进行匹配。因此,使用 Unicode 标志编译模式没有任何效果,因为您匹配的是百分比编码的 ASCII URL,而不是 Unicode 字符串。

关于python - Tornado 请求处理程序映射到国际字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17775259/

相关文章:

OpenCV 的 Python 模块需要一个 Ubuntu 14.04 不可用的库

Java正则表达式提取方括号或圆括号内的内容

python - 如何删除 CSV 文件中某个值大于另一个值的所有行?

javascript - 删除 Unicode 代码的转义

c++ - 从 char* 缓冲区构造字符串时是否需要考虑编码 (UTF-8)

python - 在 Python 中对某些 Dataframe 列进行输入

python - 在python中解析大文件的多行,将它们存储在列表中

python - Django:无法导入名称 formset_factory

java - 如何更正正则表达式以在不区分大小写的情况下找到精确的单词匹配?

正则表达式匹配前面没有特定单词的字符串