已回答以下问题:Emoji crashed when uploading to Big Query
我正在寻找一种最佳且干净的方法来将表情符号从这种\ud83d\ude04
类型编码为这种(Unicode)-\U0001f604
,因为目前,除了创建python方法之外,我没有任何其他想法将通过一个文本文件并替换表情符号编码。
这是可以转换的字符串:
Converting emojis to Unicode and vice versa in python 3
作为一个假设,可能需要逐行通过文本并将其转换?
潜在想法:
with open(ff_name, 'rb') as source_file:
with open(target_file_name, 'w+b') as dest_file:
contents = source_file.read()
dest_file.write(contents.decode('utf-16').encode('utf-8'))
答案 0 :(得分:1)
因此,我假设您以某种方式获得了一个原始ASCII字符串,其中包含带有形成代理对的UTF-16代码单元的转义序列,并且您(无论出于何种原因)都希望将其转换为{{1} }-格式。
因此,从现在开始,我假设您的输入(字节!)如下所示:
\UXXXXXXXX
现在您要执行以下操作:
weirdInput = "hello \\ud83d\\ude04".encode("latin_1")
事物转换为UTF-16代码单元的方式解释字节。有\uXXXX
,但不幸的是,它需要单独通过才能解决代理对(老实说,我不知道为什么)raw_unicode_escapes
,仅由旧的ASCII格式为latin_1
的unicode转义序列组成。类似这样的东西:
\UXXXXXXXX
现在,如果您 output = (weirdInput
.decode("raw_unicode_escape")
.encode('utf-16', 'surrogatepass')
.decode('utf-16')
.encode("raw_unicode_escape")
.decode("latin_1")
)
,您将得到:
print(output)
请注意,如果您停在中间阶段:
hello \U0001f604
然后您会得到带有笑脸的unicode字符串:
smiley = (weirdInput
.decode("raw_unicode_escape")
.encode('utf-16', 'surrogatepass')
.decode('utf-16')
)
完整代码:
print(smiley)
# hello
答案 1 :(得分:0)
\ud83d\ude04
是字符SMILING FACE WITH OPEN MOUTH AND SMILING EYES (U+1F604)
的utf16表示形式,您需要将其解码为字符,然后将字符的代码点转换为十六进制字符串。我对Python的了解不足,无法告诉您如何执行此操作。