我正在建立一个龙卷风的网络服务器。您可以搜索关键词并从服务器获得回复。
用户可以输入任何单词,如中文或日文,所以我知道我应该使用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
,它显示一个中文单词:泰国。
我现在完全糊涂了。我使用我的电脑(Mac OS)并输入泰国
来访问我的网络服务器,一切都很好。但似乎有些人试图用一种我不知道的特殊编码方式搜索相同的中文单词,所以我无法对其进行解码。
答案 0 :(得分:0)
一种可能性是某些浏览器会在可能的情况下默认为非UTF-8编码(我不确定这里发生了什么,因为它是latin-1
编码最常见的)。在表单中使用只能以UTF-8表示的字段放置隐藏的输入将强制浏览器使用该编码:
<input name="utf8" type="hidden" value="✓" />