簡體   English   中英

以編程方式將長十六進制轉換為Unicode字符(如表情符號)

[英]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_evalunichr在狹窄的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM