bottle_mysql编码失败

bottle_mysql Encoding failure

我的实现是这样的:Centos 服务器,MySQL 和 Rails 服务器,目前正在开发一个新的 bottle 应用程序。

我有一个数据库,我想在 Rails 和 Bottle 应用程序中共享日期。 我数据库中的一些数据是希腊语。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import bottle
import bottle_mysql

app = bottle.Bottle()
# dbhost is optional, default is localhost
plugin = bottle_mysql.Plugin(dbuser='user', dbpass='pass' , dbname='db')
app.install(plugin)

@app.route('/show/<item>')
def show(item, db):
    db.execute('SELECT * from visitors where id=1')
    row = db.fetchone()
    if row:
        print row['first_name'].decode("utf-8", "replace")
        return template('showitem', page=row)
    print "Empty"
    return HTTPError(404, "Page not found")

app.run(host='domain.tld', port=8080)

我数据库中的记录是一行希腊文 (id=1) 和一行英文 (id=2) 在连接期间不设置字符集: 使用 id=2 时没有错误 使用 id=1

时出现此错误
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)

像这样连接到数据库:

plugin = bottle_mysql.Plugin(dbuser='user', dbpass='pass , dbname='db', charset='utf-8')

我收到这个错误:

OperationalError: (2019, "Can't initialize character set utf-8 (path: /usr/share/mysql/charsets/)")

有任何解决此类错误的方法吗?

更新: 我将连接字符串上的字符集更改为 'utf8' 并返回到第一个错误。

清单:

  • # -*- coding: utf-8 -*- -- (你有那个)
  • charset='utf8' in connect() call -- 那是埋在 bottle_mysql.Plugin 吗? (注意:尝试 'utf-8' 和 'utf8')
  • 以 utf8 编码的文本。
  • 如果您愿意在任何地方都接受 utf8,则不需要 encode() 或 decode()。
  • u'...' 对于文字
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 接近 html 页的开头
  • CHARACTER SET utf8 COLLATE utf8_general_ci 列(或 table)定义在 MySQL.

参考文献:

row['first_name']是unicode,不需要解码

相比之下,你需要在打印时对其进行编码,如果你不这样做,python解释器会为你完成(例如,如果你将它打印到标准输出,python解释器将使用 sys.stdout.encoding).

对其进行编码

我在你的代码中遇到了同样的错误,但在我删除 .decode("utf-8", "replace")

后它会正常工作