【问题标题】:Can't read cyrillic symbols in browser URL using Flask python无法使用 Flask python 在浏览器 URL 中读取西里尔符号
【发布时间】:2018-04-16 11:44:31
【问题描述】:

大家下午好!

基本上,在使用 Flask 框架在 Python 中运行我的编程代码时,我在阅读西里尔字母时遇到问题。

What happens in URL Chrome

ma​​mapapa”必须是西里尔字母——“мамапапа

这是我的代码:

# -*- coding: utf-8 -*-
from flask import Flask, jsonify
from unidecode import unidecode
from venv import logger

app = Flask(__name__)
names1=""


@app.route('/hashtags/<string:names>', methods=['GET'])


def get_hashtags(names):

    names1 = "#" + 'names'
    np= logger.start(names1)
    return jsonify({'Сегментация хэштегов': unidecode(np)})



if __name__ == '__main__':
    app.run(port=9876)

如您所见,我已经使用 unidecodereturn jsonify({'Сегментация хэштегов': unidecode(np)}) 行中的西里尔字母翻译成拉丁字母,但这并不是我真正想做的。我的主要目的是在获得输出时获得精确的西里尔符号(如 приветСША)。

据我所知,浏览器 URL 中不可能使用西里尔字母吗?这是事实还是有任何可能的方法来达到我的目标并获得西里尔语输出?

也许有一些与 'UTF-8' 编码/解码有关的东西?

提前致谢!

【问题讨论】:

标签: python url flask encoding utf-8


【解决方案1】:

你是对的。 URL 字符有限:纯拉丁字母(a-z、小写和大写)和标记-_.~。其他字符用% 后跟两个十六进制数字进行转义。 [来源:RFC3986 appendix-A]。有些人可以创造性地使用其他字符,真正拆分路径和参数(例如+、括号等。

从历史上看,URL 是为机器设计的(http://www. 不是人类可读性最高的前缀),所以这样的转义:你可以放置所有字节,但是这样的字节是用 % 编码的。

域可以使用其他字符(ASCII 之外),但在这种情况下,它只是一个编码标准(对于 ascii):DNS 和协议仍然只使用 ASCII 字符。

浏览器可以自动进行转义,您可以显示未转义的 URL,但转义了真实的 url。如果这种自动转义适用于他们的邮件客户端/浏览器,您应该尝试您(或您的客户)的用例。

在任何情况下,使用 HTML,您都可以在要显示在 URL 栏上的 url 上以与真实 URL 不同的方式显示 URL(在链接上,并且您可以使用 javascript 进行一些控制)。

【讨论】:

    【解决方案2】:

    试一试取消报价。 示例:

    #Python3
    from urllib.parse import unquote
    string = unquote('УРЛ')
    
    #Python2
    import urllib
    url='УРЛ'
    urllib.unquote(url).decode('utf8')
    

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 1970-01-01
      • 2011-10-19
      • 2014-06-01
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多