代码之家  ›  专栏  ›  技术社区  ›  Óscar López

用python编码重音字符时出现问题

  •  2
  • Óscar López  · 技术社区  · 14 年前

    >>> import urllib
    >>> print urllib.urlencode({'foo' : raw_input('> ')})
    > áéíóúñ
    

    在mac命令行中打印:

    foo=%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%B1
    

    foo=%A0%82%A1%A2%A3%A4
    

    mac结果正确,字符按需编码;但在窗户里我会听到一堆胡言乱语。

    我猜问题出在windows编码字符的方式上,但我还没有找到解决方案;如果你能帮助我,我将非常感激。提前谢谢!

    2 回复  |  直到 13 年前
        1
  •  2
  •   Mark Tolonen    14 年前

    Windows命令行在美国Windows中使用cp437编码。您需要utf-8:

    >>> import sys
    >>> sys.stdin.encoding
    'cp437'
    >>> print urllib.urlencode({'foo':raw_input('> ').decode('cp437').encode('utf8')})
    > áéíóúñ
    foo=%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%B1
    
        2
  •  3
  •   Daniel Kluev    14 年前

    >>> str = u"áéíóúñ"
    >>> import urllib
    >>> urllib.urlencode({'foo':str.encode('utf-8')})
    'foo=%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%B1'
    

    但是,您需要首先确保字符串是unicode格式的,因此如果不是,则可能需要解码,如raw\u input().decode('latin1')或raw\u input().decode('utf-8')

    我相信输入编码取决于控制台的区域设置,所以它是特定于系统的。