使用Facebook发布数据无法获得正确的字符编码

时间:2014-04-17 23:30:37

标签: python mysql facebook-graph-api utf-8 character-encoding

我正在尝试填充Facebook从特定页面(此处为bestbuy)发布数据,通过Graph API(https://github.com/pythonforfacebook/facebook-sdk)提取到mysql表。我正在提取帖子以及对帖子的评论。这里我说的是评论,同样的问题也适用于帖子。对于db模式,字符集设置为utf-8。 现在,当我在数据库中插入注释内容(comment_message)时,我会在插入之前在Python脚本中执行comment_message.encode('utf-8')。但它不能正常工作,很多字符都被其他一些字符所取代。所以对于以下帖子中的评论 - https://www.facebook.com/12699262021/posts/10152351243512022

comment_message.encode('utf-8') -

之后产生以下结果
  

HolaÑon -

     

Muchas gracias por tu pregunta。 En caso de que no hayas tenido el   momento,te re comiendo visitarnuestrap├íginaonline   http://BestBuy.com

     

Aqu├¡concontraraslos precios sin impuestos。 Lo impuestosvar├¡   dependiendo la cuidad y la tienda en donde finalices la compra。

     

Ten en cuenta que todos los productos que compres con BestBuyest├ín   destinados al uso de los Estados Unidos,cada producto tiene una   garant├¡defabricante e n forma gratuita。 Parasaberm├是detalles   de lagarant├¡dedel fabricante,te ac onsejamos que te comuniques con   尼康。

     

Hasta mi mejor conocimiento,todas nuestras tiendas localizadas en   Nueva Yorkestar├ínabiertasel 18 de abril。

     

Atentamente,Karina

你可以看到很多人物搞砸了。下面是我使用pymysql -

插入的表格架构
CREATE TABLE `xxxxxxxxxxxxxx` (
  `comment_id` varchar(100) NOT NULL,
  `post_id` varchar(100) DEFAULT '-',
  `from_name` varchar(100) DEFAULT '-',
  `from_category` varchar(50) DEFAULT '-',
  `from_id` varchar(50) DEFAULT '-',
  `message` varchar(10000) DEFAULT '-',
  `created_time` varchar(45) DEFAULT '-',
  `likes` int(10) unsigned DEFAULT '0',
  `page` varchar(50) DEFAULT '-',
  `type` varchar(100) DEFAULT '-',
  `inserted_time` varchar(60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

如果我尝试直接插入内容而不进行任何编码,我会 -

    sql = sql.encode(self.encoding)
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 148-149:
 ordinal not in range(256)

1 个答案:

答案 0 :(得分:1)

我在这里发现了这个问题。我需要做两件事来摆脱它 -

首先,在Python脚本中将默认字符集设置为Unicode -

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

其次,在连接到db时,设置参数use_unicodecharset -

conn = pymysql.connect(host='xx', user='xx', passwd='xx', db='xx', use_unicode=True, charset='utf8')