python3将ascii字符串解释为unicode字符串

时间:2015-04-09 18:20:43

标签: python-3.x unicode

我有一个文本文件,打开时看起来像这样:

\xF0\x9F\x98\x81
\xF0\x9F\x98\x82
\xF0\x9F\x98\x83
\xF0\x9F\x98\x84
\xF0\x9F\x98\x85

hexdump看起来像这样:

0000000 5c 78 46 30 5c 78 39 46 5c 78 39 38 5c 78 38 31
0000010 0a 5c 78 46 30 5c 78 39 46 5c 78 39 38 5c 78 38
0000020 32 0a 5c 78 46 30 5c 78 39 46 5c 78 39 38 5c 78
0000030 38 33 0a 5c 78 46 30 5c 78 39 46 5c 78 39 38 5c
0000040 78 38 34 0a 5c 78 46 30 5c 78 39 46 5c 78 39 38

我正在尝试在Python中打印字符串,就像是unicode字符串一样。以下事情都失败了:

with open ("file") as f:
    for row in f:
        x = row.split()
        for i in x:
            print(i)
            print(bytes(i, encoding='utf-8'))
            print(bytes(i, encoding='utf-8').decode('unicode-escape'))

打印

\xF0\x9F\x98\x81
b'\\xF0\\x9F\\x98\\x81'
ð 
\xF0\x9F\x98\x82
b'\\xF0\\x9F\\x98\\x82'
ð
\xF0\x9F\x98\x83
b'\\xF0\\x9F\\x98\\x83'
ð
\xF0\x9F\x98\x84
b'\\xF0\\x9F\\x98\\x84'
ð
\xF0\x9F\x98\x85
b'\\xF0\\x9F\\x98\\x85'
ð

我正在尝试实现的目标就像我直接输入以下内容:

print(b'\xF0\x9F\x98\x81'.decode('utf-8'))
print(b'\xF0\x9F\x98\x82'.decode('utf-8'))
print(b'\xF0\x9F\x98\x83'.decode('utf-8'))
print(b'\xF0\x9F\x98\x84'.decode('utf-8'))
print(b'\xF0\x9F\x98\x85'.decode('utf-8'))

1 个答案:

答案 0 :(得分:2)

unicode-escape给出一个Unicode字符串,其中包含指定的代码点。 latin1将其直接转换回字节字符串,因为latin1与前256个代码点之间存在1:1映射。最后使用UTF-8解码回Unicode。

data = rb'''\xF0\x9F\x98\x81
\xF0\x9F\x98\x82
\xF0\x9F\x98\x83
\xF0\x9F\x98\x84
\xF0\x9F\x98\x85'''

data = data.decode('unicode-escape').encode('latin-1').decode('utf8')
print(ascii(data))
print(data)

输出:

'\U0001f601\n\U0001f602\n\U0001f603\n\U0001f604\n\U0001f605'





注意:我的字体不支持字符。