被编码问题搞炸了!

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

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

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

8025 次点击
所在节点    Python
74 条回复
dphdjy
2016-04-18 17:56:06 +08:00
国标是习惯简称。。。
GBK 国标扩
florije
2016-04-18 17:57:57 +08:00
如果没猜错肯定有一个地方用到了%z 的,类似 time.strftime('%z'),也就是会输出中国标准时间。
vJianZhen
2016-04-18 17:58:32 +08:00
form.name.data 这个字段是从网页上请求上来的,我查看了页面的编码也是 utf8 的。"\xD6\xD0\xB9\xFA\xB1\xEA"根据 gbk 编码解码后是『中国标』三个字,但是这三个字我们提交过,况且我提交的都是英文。页面的效果如图: http://i2.piimg.com/9c238b4453491952.png
vJianZhen
2016-04-18 18:03:00 +08:00
@florije 目前在数据库方面没有涉及时间,除非是 PyMySQL/MySQL 等自己的行为。目前数据库上面只有两个表,列也是非常简单的字段。涉及到时间的在前端用了 Flask-Moment ,但是诚如效果图所示,是用英文显示的。
pixstone
2016-04-18 18:04:42 +08:00
http://nedbatchelder.com/text/unipain.html
看篇,很好的解释了编码问题。
vJianZhen
2016-04-18 18:08:36 +08:00
@pixstone 但是……英文的,篇幅有点长,怕来不及消化。现在只想快点把问题解决掉。
est
2016-04-18 18:09:45 +08:00
py2, windows, gbk ,三码合一就直接把新手炸毛了
vJianZhen
2016-04-18 18:10:31 +08:00
@est 对,我实在要哭了!
Tink
2016-04-18 18:11:04 +08:00
为啥用 windows 呢
neoblackcap
2016-04-18 18:13:42 +08:00
已经在 linux 下面实现过一次,像你截图一样调用 create_all 方法并不会报错。

估计还是你页面上收集到的数据没有做校验转码而产生的错误
vJianZhen
2016-04-18 18:16:18 +08:00
@Tink 因为对 Linux 平台不熟悉,出了问题更懵逼
vJianZhen
2016-04-18 18:19:14 +08:00
@neoblackcap 首先谢谢你。不知道你实现时版本一样吗?我现在很怀疑是版本的 bug 或者是隐藏很深的问题。从页面上只收集了一个『 username 』,提交的还是『 Kobe 』……通过命令行能打印出来。
hahastudio
2016-04-18 18:27:22 +08:00
http://blog.wifibao.im/index.php/archives/158/
是不是新手都有这问题

https://stackoverflow.com/questions/2108824/mysql-incorrect-string-value-error-when-save-unicode-string-in-django
columns can have their own character sets, independent of the tables and the database.
neoblackcap
2016-04-18 18:33:39 +08:00
@vJianZhen
python 是 3.5.0, 各类包如下
dominate (2.2.0)
Flask (0.10.1)
Flask-Bootstrap (3.3.5.7)
Flask-Moment (0.5.1)
Flask-Script (2.0.5)
Flask-SQLAlchemy (2.1)
Flask-WTF (0.12)
itsdangerous (0.24)
Jinja2 (2.8)
MarkupSafe (0.23)
pip (7.1.2)
PyMySQL (0.7.2)
setuptools (18.2)
SQLAlchemy (1.0.12)
visitor (0.1.2)
Werkzeug (0.11.8)
WTForms (2.1)

至于 MySQL 也是使用 5.7 了
vJianZhen
2016-04-18 18:45:45 +08:00
@hahastudio 列也有字符集确实是个新观念。问题是,在视图函数上通过 create_all()来创建表的时候问题就出现了,根本不涉及插入。
vJianZhen
2016-04-18 18:47:47 +08:00
@neoblackcap 版本几乎都一样。我就更懵逼了……
pixstone
2016-04-18 19:05:01 +08:00
@loading 已经不建议 用 u “中文” 这种形式了,推荐: from __future__ import unicode_literals ,配合 # coding=utf-8


然后 还有一个 歪招:

if "的" in text: 这个(之前 V2 的帖子看到)
guyskk
2016-04-18 19:15:46 +08:00
如果还没解决的话, pdb 调试
http://python.jobbole.com/81184/
feng32
2016-04-18 19:25:57 +08:00
用全英文就行了, UI 看起来更专业,而且别人还不知道你是为了避免处理编码问题
windfarer
2016-04-18 19:40:53 +08:00
Python3 一劳永逸

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

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

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

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

© 2021 V2EX