小编jsm*_*bom的帖子

python中的UTF-16代码点计数

我从我正在使用的 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 …

python encoding utf-8 utf-16 python-3.x

6
推荐指数
1
解决办法
997
查看次数

标签 统计

encoding ×1

python ×1

python-3.x ×1

utf-16 ×1

utf-8 ×1