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>
16382 次点击
所在节点    Python
54 条回复
4gShell
2014-09-13 10:20:28 +08:00
@kafkakevin 看来是要装个Linux,可是总觉得是在逃避问题...
maikcn
2014-09-13 10:24:06 +08:00
感觉是缺少 # -*- coding: UTF-8 -*-
以及文件编码不是utf-8 without BOM 导致的...
kafkakevin
2014-09-13 10:31:19 +08:00
@4gShell 虚拟机跑起来。
loading
2014-09-13 10:31:53 +08:00
你还没遇到mine的那个呢
z7039585
2014-09-13 10:34:26 +08:00
换个Linux试试
imn1
2014-09-13 10:48:12 +08:00
如果程序是utf-8编写的,在dos运行程序前,先运行
chcp 65001
这个命令是把当前dos环境设为codepage 65001,是windows中相当于utf-8的编码
再测试,至于dos字体,建议去下载unicode字体(例如arial unicode)

编码问题,无非是IO过程前后两个编码不一致,搞清楚就行
NearTan
2014-09-13 10:52:19 +08:00
刚开始阵痛是必须的,熟悉这种节奏之后就带感了
PS 推荐熟悉结构之后用IDE
Kabie
2014-09-13 11:06:31 +08:00
试试Python3吧。。。
Cu635
2014-09-13 11:22:30 +08:00
lz的python版本?python2还是python3?
pandada8
2014-09-13 11:28:49 +08:00
Linux加Python3吧
zonyitoo
2014-09-13 11:53:23 +08:00
Linux + Python 3就可以解决楼主的问题
Reset
2014-09-13 11:56:44 +08:00
所有文件加上
#coding:utf8
所有字符串特别是中文使用
u"字符串"

可以一定程度降低编码烦恼
zzlettle
2014-09-13 12:00:35 +08:00
我就是在我的Win7 系统里面开发的django,我是python3
开发很顺利啊。编码问题的话,看你的编辑器了。我觉得python3处理一些什么这个码那个码的要好比python2
amycs
2014-09-13 12:14:14 +08:00
我也是卡在了编码上,叹气
frankzeng
2014-09-13 12:51:17 +08:00
python就是这编码一条不知卡死多少人,建议编码都采用utf8,从页面到数据库。
muzuiget
2014-09-13 12:54:28 +08:00
直接上 Linux,全世界 utf-8,省心。
xiaowangge
2014-09-13 13:19:29 +08:00
推荐搜索下: Python Weekly Unicode之痛。这篇文章赞(^_^)
daoluan
2014-09-13 13:46:45 +08:00
像 python这种高级语言易用性已经非常高了,按着错误提示寻找解决方法。这里应该是文件编码的问题,python 内部都是以 utf8 为标准的。
lu18887
2014-09-13 14:00:58 +08:00
这个问题我遇到过,不过不是在SYNCDB的时候,是插数据的时候,mysql默认编码不是UTF-8,改成UTF-8的就可以了。具体Google
4gShell
2014-09-13 14:01:01 +08:00
@Reset 根据错误提示文件来看,都是因为python自带module以及MySQL支持module的文件出错,难道要在这些文件头前全部加上# ...coding...

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

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

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

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

© 2021 V2EX