Python中从CSV文件读取Unicode表情符号

3
我是一名有用的助手,可以翻译文本。

我有一些用户推特的csv数据。

在Excel中,它显示为:

‰ÛÏIt felt like they were my friends and I was living the story with them‰Û  #retired #IAN1 

我已经将这个csv文件导入到Python中,在Python中,同一条推文的显示如下(我正在使用putty连接到服务器,并从putty的屏幕上复制)
▒▒▒It felt like they were my friends and I was living the story with them▒۝ #retired #IAN1 

我想知道如何正确地显示这些表情符号。我尝试分离这条推文中的所有单词,但不确定如何分离那些表情符号的Unicode字符。


这个 Emoji 在 Excel 上显示正常吗? - Laurent LAPORTE
正如第二行所提到的,它显示为:‰ÛÏ - Morpheus
你能试试这个吗?teststring = teststring.encode('unicode_escape') - roymustang86
1
显示推文的原始数据(例如 repr(tweet))。它可能是以UTF-8编码的字节字符串,也可能是Unicode字符串。如果数据以UTF-8保存到CSV中,则Excel在没有以“UTF-8带BOM”编码保存的情况下无法正确读取它,如io.open('out.csv','w',encoding='utf-8-sig')。如果您有一个字节字符串,请先使用.decode('utf8') - Mark Tolonen
你的 ‰ÛÏ 可能是三个字节的十六进制编码(89,DB,CF)在 Windows-1252 编码下的解释,对应二进制为 (10001001,11011011,11001111)。这不是一个有效的 UTF-8(或 CESU-8)序列。 - Crissov
显示剩余2条评论
2个回答

5
事实上,您肯定会遇到数据丢失的情况...我不知道您是如何从用户推文中获取CSV文件的(您可能需要解释一下)。但通常,CSV文件使用“cp1252”(或“windows-1252”)编码,有时使用“iso-8859-1”编码。现在,我们可以找到使用“utf-8”编码的CSV文件。
如果您的推文使用“cp1252”或任何8位单字节编码字符集进行编码,则表情符号将丢失(被替换为“?”)或转换不良。
然后,如果您将CSV文件打开到Excel中,它将使用其默认编码(“cp1252”)并加载包含损坏字符的文件。您可以尝试使用Libre Office,它有一个对话框,可以更轻松地选择编码。
从Putty复制/粘贴也会根据您的控制台编码转换您的字符...这是最糟糕的!
如果你的CSV文件使用“utf-8”编码(或“utf-16”,“utf-32”),你可能有更多机会保留表情符号。但还是有一个问题:大多数表情符号的代码点都大于U+FFFF(十进制中的65535)。例如,Grinning Face ""的代码点为U+1F600)。

这种字符在Python中处理得很糟糕,请尝试以下操作:

# coding: utf8
from __future__ import unicode_literals

emoji = u""

print(u"emoji: " + emoji)
print(u"repr: " + repr(emoji))
print(u"len: {}".format(len(emoji)))

您将得到(如果您的控制台允许):

emoji: 
repr: u'\U0001f600'
len: 2
  • 如果您的控制台不支持Unicode,则第一行不会打印。
  • \U 转义序列类似于 \u,但需要8个十六进制数字,而不是4个。
  • 是的,这个字符的长度为2!

编辑:使用Python 3,您将得到:

emoji: 
repr: ''
len: 1
  • repr()中没有转义序列,
  • 长度为1!

您可以将CSV文件(片段)作为附件发布,然后可以进行分析...

请参阅Python 2.7文档中的Python源代码中的Unicode文字


0
首先,您不应该使用从控制台复制的文本(尤其是从远程连接),因为格式差异和剪贴板的不可靠性。我建议您将CSV导出并直接读取它。
我不太确定您试图做什么,但由于Twitter表情符号基本上是压缩图像,所以无法在控制台中显示。您能否进一步解释您的问题?
我个人会将整个字符串视为Unicode,将每个字符分开放入列表中,然后根据空格重新构建单词。

你可以尝试解析字符串并逐个检查字符的等效Unicode值是否为字母/符号,如果不是,则必须是表情符号。 - P I N C O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接