用口音编码utf-8到base64

时间:2009-12-15 15:02:17

标签: python encoding utf-8 ascii base64

我有一些这样的数据:

data1 = ['Agos', '30490349304']
data2 = ['Desir\xc3\xa9','9839483948']

我正在使用期望以base64编码的数据的API,所以我所做的是:

data = data1
string = base64.b64encode("Hi, %s! Your code is %s" % (data[0], data[0]))
myXMLRPCCall(string)

适用于data1。使用data2编码没问题,但是XMLRPC会返回错误,因为它(仅来自API文档)只需要ISO-8859-1(Latin1)字符。
我的问题是:如何将我的字符串转换为Latin1以便API接受它?

3 个答案:

答案 0 :(得分:1)

首先确保您不会对编码等感到困惑。例如,请阅读this

然后注意主要的问题不在于base64编码,而在于你试图将字符串(Python 2.x中的普通字符串)放在Unicode字符串中。我相信您可以通过从示例代码中的最后一个字符串中删除“u”来解决此问题。

答案 1 :(得分:1)

base64.b64encode("Hi, %s! Your code is %s" % (data[0].decode('utf8').encode('latin1'), data[0]))

答案 2 :(得分:0)

这似乎有效:

...

data = data2
base64.b64encode("Hi, %s! Your code is %s" % (data[0], data[0]))
# => 'SGksIERlc2lyw6khIFlvdXIgY29kZSBpcyBEZXNpcsOp'

# I can't test the XMLRPC parts, so this is just a hint ..
for_the_wire = base64.b64encode("Hi, %s! Your code is %s" % (data[0], data[0]))
latin_1_encoded = for_the_wire.encode('latin-1')

# send latin_1_encoded over the wire ..

一些python(2.X)unicode读数:

相关问题