【问题标题】:Unicode Emoji's in python from csv files来自csv文件的python中的Unicode表情符号
【发布时间】:2016-12-01 19:59:54
【问题描述】:

我有一些用户推文的 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 

我想知道如何正确显示这些表情符号字符。我正在尝试将这条推文中的所有单词分开,但我不确定如何分开这些 emoji unicode 字符。

【问题讨论】:

  • 你知道表情符号的名字吗?
  • 我不确定。我刚得到原始数据。对不起
  • 这个表情符号在 Excel 上显示效果好吗?
  • 如第二行所述,它显示如下:‰ÛÏ
  • 显示推文的原始数据(例如repr(tweet))。它要么是一个可能以 UTF-8 编码的字节字符串,要么是一个 Unicode 字符串。如果数据以 UTF-8 格式保存到 CSV,Excel 将无法正确读取它,除非将其保存为“UTF-8 with BOM”编码,如io.open('out.csv','w',encoding='utf-8-sig')。如果你有一个字节串,.decode('utf8') 首先。

标签: python csv unicode


【解决方案1】:

事实上,你肯定丢失了数据……

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

如果您的推文以“cp1252”或任何 8 位单字节编码字符集编码,则表情符号会丢失(替换为“?”)或转换错误。

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

Putty 的复制/粘贴还会根据您的控制台编码转换您的字符……这是最糟糕的!

如果您的 CSV 文件使用“utf-8”编码(或“utf-16”、“utf-32”),您可能有更多机会保留 Emoji。但是仍然存在一个问题:大多数表情符号的代码点大于 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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 如果等效的 unicode 值是字母/符号,则可以执行解析字符串并逐个字符检查之类的操作,如果不是,则它必须是表情符号。
    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2017-05-27
    • 2016-04-28
    • 2019-09-06
    • 2014-09-18
    • 1970-01-01
    相关资源
    最近更新 更多