我从我正在使用的 API(电报机器人)获取一些数据。我正在使用与Telegram Bot api交互的python-telegram-bot库。数据以 UTF-8 编码以 JSON 格式返回。示例(片段):
{'message': {'text': '\u200d\u200d\u200dhttp://google.com/æøå', 'entities': [{'type': 'url', 'length': 21, 'offset': 11}], 'message_id': 2655}}
Run Code Online (Sandbox Code Playgroud)
可以看出,'entities' 包含一个 url 类型的实体,它有一个长度和一个偏移量。现在说我想在 'text' 属性中提取链接的 url:
data = {'message': {'text': '\u200d\u200d\u200dhttp://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])
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码返回:'://google.com/æøå'这显然不是实际的 url。
这样做的原因是偏移量和长度在 UTF-16 代码点中。所以我的问题是:有没有办法在 python 中使用 UTF-16 代码点?我只需要能够数出它们就行了。
我已经试过了:
text.encode('utf-8').decode('utf-16')
Run Code Online (Sandbox Code Playgroud)
但这给出了错误: UnicodeDecodeError: 'utf-16-le' codec …