[英]Convert long hex to unicode character such as emoji, programmatically
給定一個包含表情符號字符的十六進制值作為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))))
在受支持的文本編輯器中打開文件后,該文件將顯示一個表情符號字符。
如何在沒有eval
情況下在Python 2中也能使它工作?
我以為unichr
可以工作,但是它只接受小於0x10000
unicode字符。
您也可以通過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)
。
這適用於Python 2和3。它使用更安全的ast.literal_eval
來構建字符,因為如您ast.literal_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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.