【问题标题】:Why do I get latin-1 codec error with a Utf8 script, unicode data, and utf8 database?为什么我在使用 Utf8 脚本、unicode 数据和 utf8 数据库时出现 latin-1 编解码器错误?
【发布时间】:2017-04-22 15:13:42
【问题描述】:

我的 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 2..

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

有什么想法吗?

关于信息,我使用库“Dataset”来发出 MYSQL 请求,所以我无法在任何我想的地方指定任何字符集。

【问题讨论】:

    标签: python unicode encoding utf-8


    【解决方案1】:

    MYSQLdb 可能不知道它应该编码为 utf8。因此,它回退到其默认的 latin1 字符集。执行请求时将charset='utf8' 作为参数传递。

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

    更新:

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

    db.query("SET CHARACTER SET utf8;")
    

    希望对你有所帮助。

    Writing UTF-8 String to MySQL with Python

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

    【讨论】:

    • 非常感谢,使用“数据集”库我还没有找到如何将等价于 charset = 'utf8',因为 dataset.connect('MY_URL', engine_kwargs={'encoding':'utf8'}) 不起作用。但至少你的评论让我明白问题出在哪里。
    • @Quentin 抱歉,我只是假设您使用的是 MySQLdb。我为你挖得更深一些。希望更新对您有所帮助。
    • 再次感谢您抽出宝贵的时间 Philipp,我尝试了文档所说的,但它不起作用。我选择 Dataset 是因为它简化了很多使用 python 的 Mysql 数据库的使用,并且我想避免学习所有无聊和复杂的 Mysql 语法,但显然我的 linux 服务器不会让我这样做:)
    • 终于我找到了一种让它与数据集库一起工作的方法! dataset.connect('mysql://username:password@server/database?charset=utf8mb4),有兴趣的朋友:)
    猜你喜欢
    • 2015-11-16
    • 2011-05-06
    • 2013-06-11
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2016-05-05
    相关资源
    最近更新 更多