UnicodeEncodeError:'utf-8'编解码器无法在位置388处编码字符'\ ud83d':不允许替代

时间:2019-02-05 14:24:18

标签: python python-3.x pandas

当我尝试使用时:

df[df.columns.difference(['pos', 'neu', 'neg', 'new_description'])].to_csv('sentiment_data.csv')

我得到了错误:

UnicodeEncodeError: 'utf-8' codec can't encode character '\ud83d' in position 388: surrogates not allowed

我不知道此错误的含义以及如何解决此错误并将数据导出到csv / excel的方法。我已经提到过这个question,但我不太了解,也无法回答如何使用熊猫来做到这一点。

388位代表什么意思?字符'\ ud83d'是什么?

当我尝试导出到excel时出现不同的错误位置:

df[df.columns.difference(['pos', 'neu', 'neg', 'new_description'])].to_excel('sentiment_data_new.xlsx')

导出到excel时出错:

UnicodeEncodeError: 'utf-8' codec can't encode character '\ud83d' in position 261: surrogates not allowed

为什么编码相同时位置会不同?

  

其他重复的问题没有回答如何使用pandas DataFrame逃脱此错误。

1 个答案:

答案 0 :(得分:2)

此答案是对评论的回应,太长了,无法自行添加评论。

Unicode表情符号位于基本多语言窗格之外。代理对是一种使这些字形在UTF-16中直接表示为两个代码点的方法。

您可以这样将代理对强制解析为BMP外部的相应代码点:

>>> "\ud83d\ude04".encode('utf-16','surrogatepass').decode('utf-16')
'\U0001f604'

但是这种解决方案可能只会使您受益匪浅。

许多软件(例如IDLE)仅支持BMP,因为它实际上并没有使用UTF-16,而是其前身UCS-2(本质上是UTF-16),但不支持BMP之外的代码点。在IDLE中,print ('\U0001f604')只会引发UnicodeEncodeError: 'UCS-2' codec can't encode character '\U0001f604' in position 0: Non-BMP character not supported in Tk