Python 以编程方式将长十六进制字符转换为unicode字符,如表情符号
给定一个包含表情符号十六进制值的变量,如Python 以编程方式将长十六进制字符转换为unicode字符,如表情符号,python,unicode,Python,Unicode,给定一个包含表情符号十六进制值的变量,如str(例如s='1f602'),如何以编程方式将其作为UTF-8编码的表情符号打印到文件中 不以编程方式执行,但要求源代码中包含代码点本身 我知道这只在Python 3中起作用: import codecs s = '1f602' with codecs.open('test.out', 'w', 'utf-8') as outfile: outfile.write('{}\n'.format(eval('u"{}{}"'.format(r'\U
str
(例如s='1f602'
),如何以编程方式将其作为UTF-8编码的表情符号打印到文件中
不以编程方式执行,但要求源代码中包含代码点本身
我知道这只在Python 3中起作用:
import codecs
s = '1f602'
with codecs.open('test.out', 'w', 'utf-8') as outfile:
outfile.write('{}\n'.format(eval('u"{}{}"'.format(r'\U000', text))))
在支持的文本编辑器中打开该文件时,将显示单个表情符号
如何使其在Python2中也起作用,而不使用eval
我认为
unichr
可以工作,但它只接受小于0x10000
的unicode字符。这在Python 2和3中都适用。它使用更安全的ast.literal\U eval
来构建角色,因为正如您所发现的那样,unichr
在狭窄的Python 2构建中不适用于U+FFFF以上的角色
import ast
import io
s = '1f602'
s2 = "u'\\U{:08X}'".format(int(s,16))
c = ast.literal_eval(s2)
with io.open('test.txt','w',encoding='utf8') as f:
f.write(c)
您还可以使用UTF-32编码:
import struct
def fullchr(n):
return struct.pack('<I', n).decode('utf-32le')
outfile.write(fullchr(0x1F602)) # int('1F602', 16)
导入结构
def fullchr(n):
return struct.pack('那么真的没有办法不使用某种评估吗?@justhalf同意bobince的答案。它也可以移植,但速度要快得多。是的,我不知道你可以简单地执行chr(0x1F602)
在Python 3中。顺便问一下,这是什么struct
?它是一种将数据打包成二进制结构的方法,可以快速地将整数代码点填充到一个四字节的小端数据结构中,该结构恰好与UTF-32编码指定的格式相同。