为什么我使用Utf8脚本,unicode数据和utf8数据库会出现latin-1编解码器错误?

时间:2016-12-07 15:37:11

标签: python unicode encoding utf-8

我的python 2.7脚本有问题。脚本以UTF8声明,我从Google Search Console API获取的数据是Unicode格式,我想要存储它们的数据库也是UTF8(UTF-8 Unicode utf8mb4,utf8mb4_general_ci)。

如果我在我的mac上启动脚本(并将数据存储在我的物理ubuntu服务器上,完全没问题。 如果我直接从服务器或通过SSH在我的mac上启动相同的脚本,我会得到一个latin-1编解码器错误。

我在服务器和我的mac上检查了三重检查区域设置变量,我得到了完全相同的值:

LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=fr_FR.UTF-8

Ubuntu终端的编码是UTF8两个..

我不知道为什么我的脚本想要将数据存储在latin-1中,因为它是unicode而且基础是在utf8中。此外,如果我指定data.encode('utf-8'),则脚本可以正常工作但数据未正确编码..

有什么想法吗?

有关信息,我使用库"数据集"发出MYSQL请求,所以我无法在任何地方指定任何字符集。

1 个答案:

答案 0 :(得分:0)

MYSQLdb 可能并不知道它应该编码为utf8。因此,它回退到默认的latin1字符集。在您提出请求时,请将mtcarsmodellmer <- lmer(wt ~ ns(drat,2) + (hp|as.factor(gear)), data= mtcars) summary(mtcarsmodellmer) coef(mtcarsmodellmer) ranef(mtcarsmodellmer) 作为参数传递。

charset='utf8'

<强>更新

另一种选择是使用数据库查询。

import MySQLdb

connection = MySQLdb.connect(user = 'username', db = 'database', charset = 'utf8')

希望这可以帮助你。

Writing UTF-8 String to MySQL with Python

http://dataset.readthedocs.io/en/latest/api.html