无法使用Flask python在浏览器URL中读取西里尔符号

时间:2018-04-16 11:44:32

标签: python url flask encoding utf-8

大家下午好!

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

What happens in URL Chrome

mamapapa ”必须使用西里尔语 - “мамапапа

这是我的代码:

# -*- 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)

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

据我所知,浏览器网址中不可能使用西里尔字母?是真的还是有任何可能的方法来实现我的目标并获得西里尔的输出?

也许有'UTF-8'编码/解码的东西?

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

历史上URL被设计为由机器使用(http://www.不是最可读的前缀),所以这样转义:你可以放置所有字节,但这些字节用%编码。 / p>

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

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

在任何情况下,使用HTML,您可以在网址栏上显示的网址上以不同的方式显示网址(在链接上,并且您可以使用javascript控制javascript)。

答案 1 :(得分:0)

尝试取消引用。 例如:

include<iostream>
using namespace std;

int main()
{
    char M[64],K[64];
    long int i=0;

    cout<<"Enter M: ";
    cin>>M;
    cout<<"M= ";

    while(M[i])
    {
        switch(M[i])
        {
        case '0':
            cout<<"0000";
            break;
        case '1':
            cout<<"0001";
            break;
        case '2':
            cout<<"0010";
            break;
        case '3':
            cout<<"0011";
            break;
        case '4':
            cout<<"0100";
            break;
        case '5':
            cout<<"0101";
            break;
        case '6':
            cout<<"0110";
            break;
        case '7':
            cout<<"0111";
            break;
        case '8':
            cout<<"1000";
            break;
        case '9':
            cout<<"1001";
            break;
        case 'A':
            cout<<"1010";
            break;
        case 'B':
            cout<<"1011";
            break;
        case 'C':
            cout<<"1100";
            break;
        case 'D':
            cout<<"1101";
            break;
        case 'E':
            cout<<"1110";
            break;
        case 'F':
            cout<<"1111";
            break;
        case 'a':
            cout<<"1010";
            break;
        case 'b':
            cout<<"1011";
            break;
        case 'c':
            cout<<"1100";
            break;
        case 'd':
            cout<<"1101";
            break;
        case 'e':
            cout<<"1110";
            break;
        case 'f':
            cout<<"1111";
            break;
        default:
            cout<<"nInvalid hexadecimal digit "<<M[i];
        }
        i++;
    }
    return 0;
    cout<<"\nEnter K: ";
    cin>>K;
    cout<<"K: ";
    while(K[i])
    {
        switch(K[i])
        {
        case '0':
            cout<<"0000";
            break;
        case '1':
            cout<<"0001";
            break;
        case '2':
            cout<<"0010";
            break;
        case '3':
            cout<<"0011";
            break;
        case '4':
            cout<<"0100";
            break;
        case '5':
            cout<<"0101";
            break;
        case '6':
            cout<<"0110";
            break;
        case '7':
            cout<<"0111";
            break;
        case '8':
            cout<<"1000";
            break;
        case '9':
            cout<<"1001";
            break;
        case 'A':
            cout<<"1010";
            break;
        case 'B':
            cout<<"1011";
            break;
        case 'C':
            cout<<"1100";
            break;
        case 'D':
            cout<<"1101";
            break;
        case 'E':
            cout<<"1110";
            break;
        case 'F':
            cout<<"1111";
            break;
        case 'a':
            cout<<"1010";
            break;
        case 'b':
            cout<<"1011";
            break;
        case 'c':
            cout<<"1100";
            break;
        case 'd':
            cout<<"1101";
            break;
        case 'e':
            cout<<"1110";
            break;
        case 'f':
            cout<<"1111";
            break;
        default:
            cout<<"nInvalid hexadecimal digit "<<K[i];
        }
        i++;
    }
    return 0;
}