python中的UTF-8问题

python中的UTF-8问题,python,utf-8,Python,Utf 8,我不是python中utf-8的粉丝;我似乎不知道如何解决这个问题。正如您所看到的,我已经在尝试对值进行B64编码,但看起来python正在尝试首先将其从utf-8转换为ascii 一般来说,我尝试使用urllib2发布具有UTF-8字符的表单数据。我想大体上是一样的,尽管没有有效的答案。我试图通过base64编码只发送一个字节字符串 Traceback (most recent call last): File "load.py", line 165, in <module>

我不是python中utf-8的粉丝;我似乎不知道如何解决这个问题。正如您所看到的,我已经在尝试对值进行B64编码,但看起来python正在尝试首先将其从utf-8转换为ascii

一般来说,我尝试使用urllib2发布具有UTF-8字符的表单数据。我想大体上是一样的,尽管没有有效的答案。我试图通过base64编码只发送一个字节字符串

Traceback (most recent call last):
  File "load.py", line 165, in <module>
    main()
  File "load.py", line 17, in main
    beers()
  File "load.py", line 157, in beers
    resp = send_post("http://localhost:9000/beers", beer)
  File "load.py", line 64, in send_post
    connection.request ('POST', req.get_selector(), *encode_multipart_data (data, files))
  File "load.py", line 49, in encode_multipart_data
    lines.extend (encode_field (name))
  File "load.py", line 34, in encode_field
    '', base64.b64encode(u"%s" % data[field_name]))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/base64.py", line 53, in b64encode
    encoded = binascii.b2a_base64(s)[:-1]
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 7: ordinal not in range(128)
beer对象的json是(这是传递到
encode\u multipart\u data
数据):


不能对Unicode进行base64编码,只能对字节字符串进行编码。在Python 2.7中,为需要字节字符串的函数提供Unicode字符串会导致使用
ascii
编解码器隐式转换为字节字符串,从而导致出现以下错误:

>>> base64.b64encode(u'America\u2019s')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\base64.py", line 53, in b64encode
    encoded = binascii.b2a_base64(s)[:-1]
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 7: ordinal not in range(128)

不能对Unicode进行base64编码,只能对字节字符串进行编码。在Python 2.7中,为需要字节字符串的函数提供Unicode字符串会导致使用
ascii
编解码器隐式转换为字节字符串,从而导致出现以下错误:

>>> base64.b64encode(u'America\u2019s')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\base64.py", line 53, in b64encode
    encoded = binascii.b2a_base64(s)[:-1]
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 7: ordinal not in range(128)

您希望如何对Unicode进行base64编码?是否要将原始UTF8字节编码为base64?beer的值是多少?@Robᵩ - 将啤酒添加到问题中错误是指
'\u2019'
,这是一个引号字符
'
,我在您的数据中没有看到。@Blckknght-抱歉,我拿错了啤酒。我把它改成了里面有
'
的那个。但是,在我的代码中,UTF的处理还是有问题的。您希望base64如何编码Unicode?是否要将原始UTF8字节编码为base64?beer的值是多少?@Robᵩ - 将啤酒添加到问题中错误是指
'\u2019'
,这是一个引号字符
'
,我在您的数据中没有看到。@Blckknght-抱歉,我拿错了啤酒。我把它改成了里面有
'
的那个。但是,在我的代码中处理UTF还是有问题的。
>>> base64.b64encode(u'America\u2019s')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\base64.py", line 53, in b64encode
    encoded = binascii.b2a_base64(s)[:-1]
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 7: ordinal not in range(128)
>>> base64.b64encode(u'America\u2019s'.encode('utf8'))
'QW1lcmljYeKAmXM='