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

发布于 2024-09-10 17:28:12 字数 485 浏览 4 评论 0原文

我在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不顾 2024-09-17 17:28:12

您可以使用显式编码来获得一致的结果。

>>> 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_input().decode('latin1') 或 raw_input().decode('utf-8')

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

编辑: unicode(str) 也应该使用区域设置编码来转换为 unicode,因此这可能是一个解决方案。

You can use explicit encoding to get consistent result.

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

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.

谎言月老 2024-09-17 17:28:12

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

The Windows command line uses cp437 encoding in US Windows. You need 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文