UTF-8 percentage encoding and python

后端 未结 2 2029
醉梦人生
醉梦人生 2021-01-02 22:14

I\'m trying to get python to give me percent encoded strings. The API I\'m interacting with (which I think is using percent encoded UTF-8), gives %c3%ae for î. However, pyth

相关标签:
2条回答
  • 2021-01-02 22:59

    Your file has to encode your string as utf-8 before quoting it, and the string should be unicode. Also you have to specify the appropriate file encoding for your source file in the coding section:

    # -*- coding: utf-8 -*-
    
    import urllib
    
    s = u'î'
    print urllib.quote(s.encode('utf-8'))
    

    Gives me the output:

    %C3%AE
    
    0 讨论(0)
  • 2021-01-02 23:02

    That is because you're not declaring the encoding your file is using, so Python is inferring it from your current locale configuration. I'll suggest you to do this:

    # -*- coding: utf-8 -*-
    import urllib
    
    mystring = "î"
    print urllib.quote(mystring)
    print urllib.quote_plus(mystring)
    

    And also make sure your file.py is getting saved to disk with utf-8 encoding.

    For me that yields:

    $python ex.py
    %C3%AE
    %C3%AE
    

    Couple of caveats. If your trying this from the interpreter, the # -*- coding: utf-8 -*- won't work if your console encoding isn't utf-8. Instead, you should change it to whatever encoding your console is using: # -*- coding: (encoding here) -*-.

    Then, you should decode your string into Unicode using decode method and passing it the the encoding name your console is using as argument:

    mystring = "î".decode('<your encoding>')
    

    And later pass it to urllib encoded as utf-8:

    print urllib.quote(mystring.encode('utf-8'))
    print urllib.quote_plus(mystring.encode('utf-8'))
    

    Hope this helps!

    0 讨论(0)
提交回复
热议问题