我收到错误:
'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) 我一直在使用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的部分分成错误的地方(以及如何修复它)的任何想法?
我有一个Django管理表单,它有一个已知的错误源,可以防止表单被保存.我检查了模型中的所有字段,并填写了所有必填字段.不过,我继续收到标准错误消息:
Please correct the error below.
Run Code Online (Sandbox Code Playgroud)
在表单的顶部,但没有突出显示错误消息的字段.
可能是另一个原因,我该如何调试?
python ×3
django ×2
django-admin ×1
django-forms ×1
encoding ×1
pip ×1
unicode ×1
utf-16 ×1
utf-8 ×1
virtualenv ×1