来自csv文件的python中的Unicode表情符号

时间:2016-12-01 19:59:54

标签: python csv unicode

我有一些用户推特的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字符分开。

2 个答案:

答案 0 :(得分:2)

事实上,你肯定会丢失数据......

我不知道你是如何从用户的推文中获取你的CSV文件的(你可以解释一下)。但通常情况下,CSV文件在" cp1252"中是encoded。 (或" windows-1252"),有时在" iso-8859-1"编码。如今,我们可以找到以" utf-8"。

编码的CSV文件

如果你的推文是用" cp1252"或者任何8位单字节编码字符集,Emojis丢失(替换为"?")或转换不良。

然后,如果您将CSV文件打开到Excel中,它将使用它的默认编码(" cp1252")并加载包含损坏字符的文件。您可以尝试使用Libre Office,它有一个对话框,可让您更轻松地选择编码。

Putty的复制/粘贴也会根据您的控制台编码转换您的角色......这是最糟糕的!

如果您的CSV文件使用" utf-8"编码(或" utf-16"," utf-32")您可能有更多机会保留Emojis。但仍然存在一个问题:大多数Emojis的代码点大于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文档中的Unicode Literals in Python Source Code

答案 1 :(得分:0)

首先,由于格式差异以及剪贴板的不可靠性,您不应该使用从控制台复制的文本(尽管是从远程连接中复制)。我建议您导出CSV并直接阅读。

我不太确定你要做什么,但是由于它们基本上是压缩图像,因此无法在控制台中显示twitter表情符号。你介意进一步解释你的问题吗?

我个人会将整个字符串视为Unicode,将列表中的每个字符分开,然后根据空格重建字词。