事实上,你肯定会丢失数据......
我不知道你如何从用户推文中获取 CSV 文件(你可以解释一下)。但一般来说,CSV 文件是encoded https://www.rfc-editor.org/rfc/rfc2046#section-4.1.2在“cp1252”(或“windows-1252”)中,有时在“iso-8859-1”编码中。如今,我们可以找到以“utf-8”编码的CSV文件。
如果您的推文使用“cp1252”或任何 8 位单字节编码字符集进行编码,则表情符号会丢失(被“?”替换)或转换错误。
然后,如果您在 Excel 中打开 CSV 文件,它将使用默认编码(“cp1252”)并加载包含损坏字符的文件。您可以尝试使用 Libre Office,它有一个对话框,可以让您更轻松地选择编码。
Putty 的复制/粘贴还会根据您的控制台编码转换您的字符……这是最糟糕的!
如果您的 CSV 文件使用“utf-8”编码(或“utf-16”、“utf-32”),您可能有更多机会保留表情符号。但仍然存在一个问题:大多数表情符号的代码点都大于 U+FFFF(十进制 65535)。例如,笑脸 http://unicode-table.com/en/1F600/“????”的代码点为 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,则不会打印第一行,
- The
\U
转义序列类似于\u
,但需要 8 个十六进制数字,而不是 4 个。
- 是的,这个字符的长度是2!
EDIT:使用 Python 3,您可以获得:
emoji: ????
repr: '????'
len: 1
您可以做的就是将您的 CSV 文件(片段)作为附件发布,然后人们就可以对其进行分析......
也可以看看Python 源代码中的 Unicode 文字 https://docs.python.org/2/howto/unicode.html#unicode-literals-in-python-source-code在 Python 2.7 文档中。