python 龙卷风:编码和解码大约 url

python tornado: encode and decode about url

我正在用 tornado 构建一个网络服务器。可以搜索关键词得到服务器回复

用户可以输入任何单词,例如中文或日文,所以我知道我应该使用 UTF-8。

这是我的核心代码:

class SearchHandler(tornado.web.RequestHandler):
    def get(self, path):
        try:
            print(self.get_argument('key'))
            print(urllib.parse.unquote(self.get_argument('key'))
            val = urllib.parse.unquote(self.get_argument('key'))
            ...
            ...

现在假设用户搜索了一个中文单词:泰国
两个 print 将给我如下结果:

%E6%B3%B0%E5%9B%BD
泰国

在后端部分,我将使用泰国

目前一切正常。

今天我在我的日志中发现了一些奇怪的词: country-cn.html?æ³°å½content

然后我将它复制到我的浏览器中,它显示如下:

然而,我将日志文件发送到Windows并以txt打开它,它显示一个中文单词:泰国。

我现在完全糊涂了。我使用我的 PC (Mac OS) 并输入 泰国 来访问我的网络服务器,一切正常。但是好像有人试图用我不知道的特殊编码方式搜索同一个中文单词,所以我无法解码。

一种可能性是某些浏览器会在可能的情况下默认使用非 UTF-8 编码(我不确定这里发生了什么,因为 latin-1 编码最常见)。在您的表单中放置一个隐藏的输入,其中包含一个只能以 UTF-8 表示的字段将强制浏览器使用该编码:

<input name="utf8" type="hidden" value="&#x2713;" />