给定一个包含表情符号的十六进制值为str
的变量(例如s = '1f602'
),如何以编程方式将其作为UTF-8编码的表情符号字符打印到文件中?
This question不以编程方式执行,但要求代码指向源代码中包含。
我知道这只适用于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))))
在支持的文本编辑器中打开文件时,将显示一个表情符号字符。
如何在Python 2中使用它,而没有eval
?
我认为unichr
可行,但它只接受小于0x10000
的unicode字符。
答案 0 :(得分:3)
你也可以通过UTF-32编码:
import struct
def fullchr(n):
return struct.pack('<I', n).decode('utf-32le')
outfile.write(fullchr(0x1F602)) # int('1F602', 16)
或者从Python 3.3开始,不再有像窄版本那样的东西,所以你可以使用chr(0x1F602)
。
答案 1 :(得分:0)
这适用于Python 2和3.它使用更安全的ast.literal_eval
来构建角色,因为正如您所发现的那样,unichr
对于狭窄的Python上的U + FFFF以上的字符不起作用2 build。
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)