以编程方式将长十六进制转换为unicode字符,例如表情符号

时间:2018-02-01 15:25:15

标签: python unicode

给定一个包含表情符号的十六进制值为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字符。

2 个答案:

答案 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)