我有一种方法可以从第三方接收类似这样的数据
def func(**kwagrs):
print kwagrs
输出
{'payload':u'{“ id”:“ 50b4f4b3e319586b10230f68d21f5edb”,“ data”:{“ message”:“ message is \\ u00a3 150 \\ u2192 \\ u00c5 \\ u25024 \\ u00e9”,“ length”: 47}}'}
如何在python中将\\ u00a3转换为£
另外,您会注意到有效负载的值类型是Unicode而不是字典或JSON
我试图在StackOverflow中找到类似的问题,但没有找到任何解决方案。
答案 0 :(得分:0)
借助ValueError: unichr() arg not in range(0x10000) (narrow Python build),我来到了
import struct
def unichar(i):
try:
return unichr(i)
except ValueError:
return struct.pack('i', i).decode('utf-32')
def func(arg):
msg = args['payload']['data']['message']
# msg = 'message is \\u00a3 150 \\u2192\\u00c5\\u25024\\u00e9'
print ' '.join(''.join([unichar(int(ch, 16)) for ch in chunk.split('\\u')[1:]]) if chunk.startswith('\\u') else
chunk for chunk in msg.split(' '))
func({'payload':{'data':{'message':"message is \\u00a3 150 \\u2192\\u00c5\\u25024\\u00e9"}}})
如果运行上面的代码,我们将得到 150英镑→Åé的消息。 注意:我们可能有更好的解析代码...