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

标签 python windows macos encoding utf-8

我在使用 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编码字符的方式上,但我一直没能找到解决方案;如果你能帮助我,我将非常感激。提前致谢!

最佳答案

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

>>> 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,因此这可能是一个解决方案。

关于python - 使用 python 编码重音字符时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3315095/

相关文章:

python - 使用 pip download -rrequirements.txt 的问题

python - 可以使用闭包来简化 Python 中的函数吗?

windows - 在 Windows 中捕获崩溃

java - 无法在 mac os x 上分配内存错误 - java(xx,xx) malloc : *** mmap(size=XX) failed (error code=12)

swift - OSX swift : How to listen to Keypress?

macos - 如何在 Mac OS X 上读取和发送 UDP 数据包?

python - 如何通过匹配字符串在Python中提取父html标签

python - 在不使用 python 请求模块的情况下进行此 API 调用的最佳替代方法是什么?

python - Pip --user 将包安装到 Windows 10 上的默认用户目录

sql-server - SQL Server 2012 开发人员版 - 安装失败