首页 > 解决方案 > 用python编码unicode

问题描述

我试图了解编码 unicode 在 python2.7 中的工作原理,到目前为止很容易找到解决方案,但我还没有找到任何明确的解释,因为这里发生了什么。这是一个例子。

简介

我们收到了一个 unicode 变量,称为filter_type filter_type = u'some_välüe'

我们将它放入一个 dict 并将其传递到python 库 urllib.urlencode

像这样:

urllib.urlencode({"param:" ..., "filter_type": filter_type}

这个问题。

urllib.urlencode它内部循环提供给它的数据并将键和值包装到str()内置函数中,以在将每个键和值编码为 url 之前获取每个键和值的字符串表示形式。

我们收到类似于以下内容的错误: {UnicodeEncodeError}'ascii' codec can't encode character u'\xf1' in position 42: ordinal not in range(128).

你会得到同样的错误str(u'some_välüe')

因此,经过一些研究和深入研究后,看起来当您将 unicode 值包装在其中时,str()它会尝试将值编码为设置的默认编码。(我的假设)

>>> import sys
>>> sys.getdefaultencoding()
ascii

解决方案。

所以我们可以通过使用utf-8对这些 un​​icode 字符串进行编码来解决这个问题。
filter_type = u'some_välüe'.encode('utf-8').

这个问题。

但问题来了。在我提到urllib.urlencode将键和值包装到str()函数中之前。

这些值现在已经编码,所以..

  1. str() 现在在这种情况下做了什么?
  2. unicode 对象的表示在编码为utf-8时会发生变化吗?
  3. 如果确实如此,为什么首先str()尝试将 unicode 对象编码为 ascii(默认)。

标签: pythonunicodeencodingutf-8python-2.x

解决方案


推荐阅读