被编码问题搞炸了!

2016-04-18 15:57:50 +08:00
 vJianZhen

http://i3.piimg.com/d031ecea9295bc8c.png

做毕业设计,目前跟着《 Flask Web 开发》敲代码。 到了数据库这段,进行不下去了,因为编码问题。 文件的编码、连接编码、数据库编码、校验编码……不明所以,一团混乱。 图上的虽然是个警告,但是不消灭没法下一步。 网上找了一圈,还是没有方案能解决。 有大神知道怎么解决吗?还请不吝赐教~万分感谢!

8007 次点击
所在节点    Python
74 条回复
florije
2016-04-18 16:09:02 +08:00
扔到 git 上或者啥地方,帮你看下。
neoblackcap
2016-04-18 16:19:00 +08:00
大致推测就是你建的表的默认值跟该字段的类型不符

建议你将数据库类型,你的 Model 都放出来。同时提问的时候请参考, http://zhuanlan.zhihu.com/p/20752519
gssdromen
2016-04-18 16:20:04 +08:00
把出问题的地方代码贴一下看看呗
viease
2016-04-18 16:36:43 +08:00
show 你的 git
vJianZhen
2016-04-18 16:44:36 +08:00
各位,在百度云 http://pan.baidu.com/s/1o8Ijnce 看吧……
尝试了很久,还是没能 push 上 github 。
出错的地方大概在 hello.py 的第 69 行,查询数据库那行。
vJianZhen
2016-04-18 16:50:25 +08:00
代码在此处
https://gist.github.com/mafanshu/4d557b6ff32049fe59f202d9c8231770
这个功能刚才才知道……@neoblackcap
mornlight
2016-04-18 16:56:15 +08:00
user = User(username=form.name.data)

你 debug 一下 form.name.data 是个什么东西,啥类型
kaneg
2016-04-18 17:07:50 +08:00
你的 python 文件中有中文,应该在文件第一行加 encoding 声明:
#encoding=utf-8
haozhang
2016-04-18 17:11:33 +08:00
三码合一: python 代码文件编码, mysql 连接时的编码, mysql 数据库存储的编码
vJianZhen
2016-04-18 17:19:21 +08:00
@mornlight 是从表单里获得的文本框里的数据,字符串类型
@kaneg 声明后没变化
vJianZhen
2016-04-18 17:25:00 +08:00
@haozhang Python 代码文件编码 utf-8 , MySQL 中 character_set_connection 值为 utf-8 , character_set_database 值为 utf8mb4 (原本是 utf8 ,后来根据网上的说法改成这样,都没用)
vJianZhen
2016-04-18 17:25:41 +08:00
另外,在浏览器上报的是 500 错误。书本对应的项目地址: https://github.com/miguelgrinberg/flasky
Vamwere
2016-04-18 17:27:50 +08:00
这个时候是不是应该说一句请用 python3 ?
loading
2016-04-18 17:29:58 +08:00
如果使用 py2 ,请在所有字符串前面加上 u ,也就是:

u'sadfsa'

多用 decode,encode
vJianZhen
2016-04-18 17:30:18 +08:00
@Vamwere 用的就是 Python3.5.32 ,但我觉得也有版本不匹配的因素才导致了问题。=
vJianZhen
2016-04-18 17:32:18 +08:00
Python 的版本是 3.5.1 。
hahastudio
2016-04-18 17:35:19 +08:00
>>> print "\xD6\xD0\xB9\xFA\xB1\xEA".decode("gbk")
中国标
你有地方存的数据是 GBK 编码的

Python 别老跟 Windows 一起用= =
vJianZhen
2016-04-18 17:48:40 +08:00
@hahastudio 所有能想到的地方都是 utf8 编码的,实在不知道哪里有数据是 gbk 编码。==。用 Windows 是因为习惯,慢慢会转 Linux 或 MAC
florije
2016-04-18 17:52:12 +08:00
好吧,本地全 utf-8 环境 db.create_all()是没有任何问题的。
form.name.data 这个的编码是 GBK ,搜下 mysql 相关的就能找到这个错误。
vJianZhen
2016-04-18 17:52:38 +08:00
而且没有『中国标』这三个字的数据,我不知道它从哪里冒出来的==。难道是 PyMySQL 的行为么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/271999

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX