【发布时间】:2016-09-01 20:13:49
【问题描述】:
我正在从我正在使用的 API(电报机器人)获取一些数据。 我正在使用与Telegram Bot api 交互的python-telegram-bot 库。 数据以 JSON 格式的 UTF-8 编码返回。 示例(sn-p):
{'message': {'text': '????\u200d????\u200d????\u200d????http://google.com/æøå', 'entities': [{'type': 'url', 'length': 21, 'offset': 11}], 'message_id': 2655}}
可以看出,'entities' 包含一个 url 类型的实体,它有一个长度和一个偏移量。 现在说我想在'text'属性中提取链接的url:
data = {'message': {'text': '????\u200d????\u200d????\u200d????http://google.com/æøå', 'entities': [{'type': 'url', 'length': 21, 'offset': 11}], 'message_id': 2655}}
entities = data['entities']
for entity in entities:
start = entity['offset']
end = start + entity['length']
print('Url: ', text[start:end])
然而,上面的代码返回:'://google.com/æøå',这显然不是实际的 url。
原因是偏移量和长度在 UTF-16 代码点中。所以我的问题是:有没有办法在 python 中使用 UTF-16 代码点?我只需要能够数出它们就可以了。
我已经试过了:
text.encode('utf-8').decode('utf-16')
但这给出了错误:UnicodeDecodeError: 'utf-16-le' codec can't decode byte 0xa5 in position 48: truncated data
任何帮助将不胜感激。 我使用的是 python 3.5,但由于它是一个统一的库,让它在 python 2.x 中也能工作会很可爱。
【问题讨论】:
-
欢迎来到本站!查看tour,了解更多有关提出问题的信息,这些问题将吸引高质量的答案。请edit your question 包含以下内容好吗? (1) 指向您正在使用的特定 API 的链接; (2) 您用于接收响应文本的代码; (3) 您用于获取
entities列表的代码?这些信息对我回答很有帮助。谢谢! -
@cxw 我已经编辑了我的答案,以尽我所能反映变化。
标签: python python-3.x encoding utf-8 utf-16