微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 python 3 中 Unescape 转义表情符号

如何解决在 python 3 中 Unescape 转义表情符号

我正在尝试使用 Python 3 中的转义字符(表情符号)对字符串进行转义。 我对所有这些尝试都不走运:

import html
import json
from werkzeug.utils import unescape

a = 'foo \ud83d\udcde\ud83d\udce7 bar'

html.unescape(a)
a.encode().decode()
json.loads(f'{{"text":"{a}"}}').get('text')
unescape(a)

一切都不起作用。

任何关于精益和简单方法的想法?也许是图书馆?

解决方法

你可以看看这个库:https://pypi.org/project/demoji/。 你也可以试试

print("\U0001F600")

哪个会输出这个

?

你也可以试试这个

s = '?'
print(s.encode('unicode-escape'))

将输出这个

b'\\U0001f600'

另请访问此网站以获取完整列表。 https://unicode.org/emoji/charts/full-emoji-list.html

,
a = '\\ud83d\\udcde'.encode("latin_1")
                    .decode("raw_unicode_escape")
                    .encode('utf-16','surrogatepass')
                    .decode('utf-16')
                    .encode("raw_unicode_escape")
                    .decode("latin_1")

# \U0001f4de 

a = '\\ud83d\\udcde'.encode("latin_1")
                    .decode("raw_unicode_escape")
                    .encode('utf-16','surrogatepass')
                    .decode('utf-16')
# ?

您需要进行一系列的编码和解码,才能将 4 位 unicode 转义转换为 8 位 unicode 转义。详细了解 Unicode here


  1. .encode('latin1') 会给你字节:b'\\ud83d\\udcde'
  2. .decode("raw_unicode_escape").encode('utf-16','surrogatepass') 将为您提供 2 位十六进制转义符:b'\xff\xfe=\xd8\xde\xdc'
  3. .decode('utf-16') 使用 utf-16 解码它会给你表情符号:?(在很暗的模式下可能很难看到表情符号)
  4. .encode("raw_unicode_escape") 再次对其进行编码将为您提供 8 位 Unicode 作为字节:b'\\U0001f4de'
  5. .decode("latin_1") 最后,将 latin1 解码回来会给你 8 位的 Unicode 字符串:\U0001f4de

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。