Python 编码折磨是一个必经过程吗?

2014-09-13 09:02:33 +08:00
 4gShell
跟django文档里的第一个学习项目在创建完初始的目录结构修改settings.py连接数据库的参数后,运行
python manage.py syncdb出现下边的错误提示,下去买包烟希望能有惊喜答复。

E:\django_Site\mysite>python manage.py syncdb
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\core\managemen
t\__init__.py", line 385, in execute_from_command_line
utility.execute()
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\core\managemen
t\__init__.py", line 354, in execute
django.setup()
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\__init__.py",
line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\apps\registry.
py", line 108, in populate
app_config.import_models(all_models)
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\apps\config.py
", line 197, in import_models
self.models_module = import_module(models_module_name)
File "G:\Python27\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\contrib\auth\m
odels.py", line 40, in <module>
class Permission(models.Model):
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\db\models\base
.py", line 125, in __new__
new_class.add_to_class('_meta', Options(meta, **kwargs))
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\db\models\base
.py", line 300, in add_to_class
value.contribute_to_class(cls, name)
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\db\models\opti
ons.py", line 166, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length(
))
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\db\__init__.py
", line 40, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\db\utils.py",
line 242, in __getitem__
backend = load_backend(db['ENGINE'])
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\db\utils.py",
line 108, in load_backend
return import_module('%s.base' % backend_name)
File "G:\Python27\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "G:\Python27\lib\site-packages\django-1.7-py2.7.egg\django\db\backends\my
sql\base.py", line 17, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb2 in position 20: invalid
start byte

E:\django_Site\mysite>
16243 次点击
所在节点    Python
54 条回复
4gShell
2014-09-13 14:02:25 +08:00
@lu18887 上面贴了MySQL status,编码都是utf8,难道是utf8与UTF-8的区别?
imn1
2014-09-13 14:53:50 +08:00
utf8_unicode_ci和utf8_general_ci区别

在資料庫系統MySQL中有多种字符集,其中utf8_unicode_ci和utf8_general_ci是最常用的,但是utf8_general_ci对某些语言的支持有一些小问题,如果可以接受,那最好使用utf8_general_ci,因为它速度快。否则,请使用较为精确的utf8_unicode_ci,不过速度会慢一些。

----------------------------------------摘自wiki

google也没有见到好的解决方案,但有两个帖子说重装了mysqldb模块解决,我没用过dj,不清楚是否这样
4gShell
2014-09-13 15:35:10 +08:00
@imn1 很感谢呢。
cbsw
2014-09-13 18:25:34 +08:00
先考虑一下项目能不能用 python3,能的话就赶紧切到 py3 上,自己学习的话就更应该用 python3 了,python 党要积极地拥抱 python3,现在连 django,flask,numpy,scipy,scikit-learn,sphinx等这些大型项目都已经支持 python3 了,python3 在很多方面都是比较方便的,基本也不会遇到编码问题了
4gShell
2014-09-13 22:17:19 +08:00
@cbsw 恩,要换的,但也要弄个明白怎么回事。
gladuo
2014-09-14 00:22:17 +08:00
@muzuiget windows想开发真难
Reset
2014-09-14 07:59:52 +08:00
@4gShell 猜测主要是你的 model 有些字段用了中文 比如 verbose_name 之类的
把你自己写的 py 文件都加上编码utf8的声明,然后用 unicode 字符串

如果能直接用 py3 最好 不折腾
leopardwei
2014-09-14 09:29:51 +08:00
@4gShell 楼主你太纠结了,强迫症严重了点儿,呵呵

这明显是编码问题了,既然已经知道问题所在,也有解决办法,还耿耿于怀,何必呢!在 windows 下很受伤,换个地方吧,如 Linux 或者 Mac 之类的。
azuginnen
2014-09-14 09:37:29 +08:00
@xiaowangge 这篇文章真不错,再加上joel的那篇文章,字符编码这一块基本上就搞清了。。

所有不懂编码问题的国际程序员,就跟不信基因的医生一样!!!(joel如是说)
iam36
2014-09-14 09:50:20 +08:00
把你粘过来的代码中的符号都手工重新录入一下,尤其是什么引号冒号之属。
4gShell
2014-09-14 12:14:01 +08:00
@leopardwei 强迫症重度患者,好害羞。已换到ubuntu,不过眼睛看的好累。
leopardwei
2014-09-14 23:50:17 +08:00
用 ubuntu 换大屏幕显示器,终端字体及背景设好,哦,对了,字体大一点,一样很 OK 的说。
jun4rui
2014-09-15 10:31:40 +08:00
Ruby也一样的,在Windows下(简体Windows默认字符集是GBK,还不能改)各种报错……
lzjun
2016-09-02 09:07:28 +08:00

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

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

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

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

© 2021 V2EX