小编Sco*_*ott的帖子

执行os.walk时出现UnicodeDecodeError

我收到错误:

'ascii' codec can't decode byte 0x8b in position 14: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

当试图做os.walk时.发生此错误是因为目录中的某些文件中包含0x8b(非utf8)字符.这些文件来自Windows系统(因此是utf-16文件名),但我已将文件复制到Linux系统,并使用python 2.7(在Linux中运行)遍历目录.

我已经尝试将一个unicode启动路径传递给os.walk,它生成的所有文件和dirs都是unicode名称,直到它出现非utf8名称,然后由于某种原因,它不会将这些名称转换为unicode和然后代码在utf-16名称上窒息.无论如何要解决这个问题,而不是手动查找和更改所有令人反感的名字?

如果在python2.7中没有解决方案,是否可以在python3中编写脚本来遍历文件树并通过将它们转换为utf-8来修复坏文件名(通过删除非utf8字符)?注意,除了0x8b之外,名称中还有许多非utf8字符,因此需要以一般方式工作.

更新:0x8b仍然只是一个btye char(只是无效的ascii)的事实使它更令人费解.我已经验证将这样的字符串转换为unicode存在问题,但是可以直接创建unicode版本.以机智:

>>> test = 'a string \x8b with non-ascii'
>>> test
'a string \x8b with non-ascii'
>>> unicode(test)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 9: ordinal not in  range(128)
>>> 
>>> test2 = u'a string \x8b with non-ascii'
>>> test2
u'a string \x8b with non-ascii'
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误的回溯:

80. …
Run Code Online (Sandbox Code Playgroud)

python unicode encoding utf-8 utf-16

19
推荐指数
3
解决办法
1万
查看次数

pip和virtualenv在错误的地方安装django的部分

我一直在使用virtualenv几个星期,直到今天没有任何问题.使用pip使用-r requirements.txt安装我的env,它正在将错误的地方安装Django(v1.5)的一部分.而不是将整个来源放入:

env/lib/python2.7/site-packages/django/
Run Code Online (Sandbox Code Playgroud)

它将conf /和contrib /的一部分放在:

env/django/
Run Code Online (Sandbox Code Playgroud)

当然,像管理页面这样的Django部分不起作用.当我将这两个目录移动到正确的位置时,一切正常,并且没有重复的文件.我也尝试删除整个env目录并以相同的结果重新开始.

关于为什么virtualenv和pip将django的部分分成错误的地方(以及如何修复它)的任何想法?

python django pip virtualenv

10
推荐指数
1
解决办法
1024
查看次数

Django管理表单上未显示的字段中的错误

我有一个Django管理表单,它有一个已知的错误源,可以防止表单被保存.我检查了模型中的所有字段,并填写了所有必填字段.不过,我继续收到标准错误消息:

Please correct the error below.
Run Code Online (Sandbox Code Playgroud)

在表单的顶部,但没有突出显示错误消息的字段.

可能是另一个原因,我该如何调试?

python django django-forms django-admin

2
推荐指数
1
解决办法
2725
查看次数