Facebook帖子数据字符编码不正确

0 投票
1 回答
646 浏览
提问于 2025-04-18 03:12

我正在尝试从一个特定的Facebook页面(这里是bestbuy)获取帖子数据,并通过Graph API(https://github.com/pythonforfacebook/facebook-sdk)将这些数据存入mysql数据库。我提取了帖子和帖子下的评论。这里我主要说的是评论,帖子也有类似的问题。数据库的字符集设置为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 visitar nuestra página online http://BestBuy.com.

Aquí encontraras los precios sin impuestos. Lo impuestos varían dependiendo la cuidad y la tienda en donde finalices la compra.

Ten en cuenta que todos los productos que compres con Best Buy están destinados al uso de los Estados Unidos, cada producto tiene una garantía de fabricante e n forma gratuita. Para saber más detalles de la garantía del fabricante, te ac onsejamos que te comuniques con Nikon.

Hasta mi mejor conocimiento, todas nuestras tiendas localizadas en Nueva York es tarán abiertas el 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 个回答

1

我找到了问题所在。为了解决这个问题,我需要做以下两件事:

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

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

其次,在连接数据库时,设置参数 use_unicodecharset -

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

撰写回答