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")
后它会正常工作
我的实现是这样的: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'
inconnect()
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")