Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将utf-8字符串显示/转换为正确的符号_Python_Unicode_Encoding_Utf 8 - Fatal编程技术网

Python 如何将utf-8字符串显示/转换为正确的符号

Python 如何将utf-8字符串显示/转换为正确的符号,python,unicode,encoding,utf-8,Python,Unicode,Encoding,Utf 8,我有一个列表,上面有编码为utf-8字符的WhatsApp表情符号。我用来解码表情符号的表格在 通过这个表,我试图统计使用的表情符号的数量,我已经成功地使用了正则表达式技术。问题是我创建了一个字典,其中键是utf-8字符作为字符串,键值是整数。以下是: print d_emo for k, v in d_emo.items(): print k.encode('utf8'), v 生成此输出: {'\\xF0\\x9F\\x98\\xA2': 2, '\\xF0\\x9F\\x98\\

我有一个列表,上面有编码为utf-8字符的WhatsApp表情符号。我用来解码表情符号的表格在

通过这个表,我试图统计使用的表情符号的数量,我已经成功地使用了正则表达式技术。问题是我创建了一个字典,其中键是utf-8字符作为字符串,键值是整数。以下是:

print d_emo
for k, v in d_emo.items():
    print k.encode('utf8'), v
生成此输出:

{'\\xF0\\x9F\\x98\\xA2': 2, '\\xF0\\x9F\\x98\\x82': 1, '\\xF0\\x9F\\x98\\x86': 2, '\\xF0\\x9F\\x98\\x89': 1, '\\xF0\\x9F\\x8D\\xB5': 2, '\\xF0\\x9F\\x8D\\xB0': 4, '\\xF0\\x9F\\x8D\\xAB': 2, '\\xF0\\x9F\\x8D\\xA9': 2, '\\xF0\\x9F\\x98\\x98': 1, '\\xE2\\x98\\xBA': 33, '\\xE2\\x98\\x95': 1}
\xF0\x9F\x98\xA2 2
\xF0\x9F\x98\x82 1
\xF0\x9F\x98\x86 2
\xF0\x9F\x98\x89 1
\xF0\x9F\x8D\xB5 2
\xF0\x9F\x8D\xB0 4
\xF0\x9F\x8D\xAB 2
\xF0\x9F\x8D\xA9 2
\xF0\x9F\x98\x98 1
\xE2\x98\xBA 33
\xE2\x98\x95 1
如果我使用此代码:

for k, v in d_emo.items():
    print k.encode('utf-8').decode('unicode_escape'), v
我明白了


我应该有笑脸之类的。有什么建议吗?这在Python2.7中。

这将正确解码Unicode字符,但在Python2.X中,当使用BMP之外的字符(基本多语言平面,字符U+0000到U+FFFF)时,您会受到一些限制:

输出:

☺ u'\u263a'白色笑脸

您使用的字体是否包含所有表情符号?@RobbyCornelissen是的。当我使用*.readlines()和print*读入原始文本文件时,它会显示正确的表情您的输入是什么(show
print repr(您的输入)
)?您的问题中显示的不是utf-8数据。您也可以使用,例如,
python-c“导入emoji;打印(emoji.emojize('python is:thumbsup:',use_aliases=True))”
这是错误的。Python 2和3都可以打印非bmp字符,例如:
print(u'\U0001f606')
(@J.F.Sebastian,我在哪里说过不能?2.X示例正在打印它们,但没有命名它们。这是错误的,因为OP应该修复产生
b'\\xF0\\x9F\\x98\\xA2'
而不是
u'\U0001f622'
的任何软件。在这种上下文中甚至提到BMP都是不合适的——OP不理解其中的区别tween字节、Unicode代码点及其在Python源代码中的表示形式。如果您说Python X.Y使用Unicode Z版本,我会理解,因此,
unicodedata
还不知道这样或那样的字符(特别是一些表情符号),但您仍然可以使用它们。
ð¢ 2
ð 1
ð 2
ð 1
ðµ 2
ð° 4
ð« 2
ð© 2
ð 1
⺠33
â 1
import unicodedata as ud
D = {'\\xF0\\x9F\\x98\\xA2': 2, '\\xF0\\x9F\\x98\\x82': 1, '\\xF0\\x9F\\x98\\x86': 2, '\\xF0\\x9F\\x98\\x89': 1, '\\xF0\\x9F\\x8D\\xB5': 2, '\\xF0\\x9F\\x8D\\xB0': 4, '\\xF0\\x9F\\x8D\\xAB': 2, '\\xF0\\x9F\\x8D\\xA9': 2, '\\xF0\\x9F\\x98\\x98': 1, '\\xE2\\x98\\xBA': 33, '\\xE2\\x98\\x95': 1}
for k,v in D.iteritems():
    k = k.decode('unicode-escape').encode('latin1').decode('utf8')
    try:
        n = ud.name(k)
    except ValueError:
        n = 'no such name'
    print k,repr(k),n