使用 python 编码重音字符时出现问题
我在使用 python 命令行对 URL 中的重音字符进行编码时遇到问题。将我的问题简化为本质,此代码:
>>> import urllib
>>> print urllib.urlencode({'foo' : raw_input('> ')})
> áéíóúñ
在 mac 命令行中打印此内容:
foo=%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%B1
但相同的代码在 windows 命令行中打印此内容:
foo=%A0%82%A1%A2%A3%A4
mac 结果是正确的,并且字符根据需要进行编码;但在 Windows 中我得到了一堆乱码。
我猜问题出在Windows编码字符的方式上,但我一直没能找到解决方案;如果你能帮助我,我将非常感激。提前致谢!
I'm having trouble encoding accented characters in a URL using the python command line. Reducing my problem to the essential, this code:
>>> import urllib
>>> print urllib.urlencode({'foo' : raw_input('> ')})
> áéíóúñ
prints this in a mac command line:
foo=%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%B1
but the same code prints this in windows' command line:
foo=%A0%82%A1%A2%A3%A4
The mac result is correct and the characters get encoded as needed; but in windows I get a bunch of gibberish.
I'm guessing the problem lies in the way windows encodes characters, but I haven't been able to find a solution; I'd be very grateful if you could help me. Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用显式编码来获得一致的结果。
但是,您需要首先确保您的字符串采用 unicode,因此如果不是,则可能需要解码,例如 raw_input().decode('latin1') 或 raw_input().decode('utf-8')
输入编码取决于我相信控制台的区域设置,因此它是特定于系统的。
编辑: unicode(str) 也应该使用区域设置编码来转换为 unicode,因此这可能是一个解决方案。
You can use explicit encoding to get consistent result.
However you need to ensure your string is in unicode first, so it may require decoding if its not, like raw_input().decode('latin1') or raw_input().decode('utf-8')
Input encoding depends on the locale of console, I believe, so its system-specific.
EDIT: unicode(str) should use locale encoding too to convert to unicode, so that could be a solution.
Windows 命令行在美国 Windows 中使用 cp437 编码。你需要utf-8:
The Windows command line uses cp437 encoding in US Windows. You need utf-8: