如果你对Python Django中的项目的实际应用操作方案有不解之处的话,你可以通过我们的文章对Python Django中的项目在实际操作有一个详细的介绍,以下就是文章内容的具体介绍。望你会有所收获。
Python Django项目中报
- 'ascii' codec can't decode byte 0xe6 in position
15: ordinal not in range(128)
现在来跟踪一下这个BUG。看一下要如何解决第一种情况:
- try:
- return HttpResponse("<script>alert);
</script><script>window.location.href
='/serverinfolist/levels/?t_id="+app_id+"';</script>")- except Exception,e:
- logging.debug(e)
这样的写就报这个错了。初步我感觉问题应该是出在:JS写法上面导致的!网上追踪:一个很关键的并且要常记住的,就是代码中所有字符串都统一使用unicode,而不是str。这样,自己就能很清楚要处理的字符串类型了。请记住,是所有,任何地方。
- >>s1 = u'%s欢迎你' % u'北京'
- >>s1
输出:
- u'\u5317\u4eac\u6b22\u8fce\u4f60'
得到的是unicode编码形式
- >>print s1
返回的就是 欢迎你北京
- >>s1 = '%s欢迎你' % '北京'
- >>s1
输出:
- '\xb1\xb1\xbe\xa9\xbb\xb6\xd3\xad\xc4\xe3'
返回字符串编码>>print s1 返回的就是 欢迎你北京但是如果这样写:>>s1 = u'%s欢迎你' % '北京'则报:
- UnicodeDecodeError: 'ascii' codec can't decode
byte 0xb1 in position 0: or- not in range(128)
同样的如果这样写:>>s1 = '%s欢迎你' % u'北京'一样的会报这样的错误!总结:如果想使用%s 的格式化输出的方式的话就必须要注意其前后两者的编码方式保持一致。要不然就会报这种错误!
由UnicodeDecodeError可猜想得到,解析器尝试使用ascii对'%s欢迎您!'进行解码,由于'%s欢迎您!'实际是使用utf-8编码的(这是我系统终端默认的),所以使用ascii解码肯定会错'%s欢迎你' 解析器会尝试使用ascii对其做解码处理。由于默认我们为utf-8所以出错
PS: 引自一段对话摘要如下:
str转成unicode不是直接构造,是用str对象的decode方法。str的编码是与系统环境相关的,一般就是sys.getfilesystemencoding()得到的值unicode你可以不管它是怎么存的,就把它看做是系统能够识别其中内容的文本类型所以从unicode转str,被看做是把一个信息文本编码为二进制字节流的过程,要用encode方法.
从str转unicode,看作是从二进制串出解读出有意义的信息文本,所以要用decode其中的str 可以看成是一个对象处理!现在我将代码写成如下:
- return
- HttpResponse("<script>alert('操作成功!');</script>
- <script>window.location.href='/serverinfolist/levels/?t_id=%s';</script>" % app_id.decode('utf-8'))
还是继续报。想起来之前遇到的BT问题。解决办法:
- return HttpResponseRedirect("/serverinfolist/levels/?t_id="+app_id)
这样就可以解决了。
【编辑推荐】