Python Django中的項目中報的實際應(yīng)用方案簡介
如果你對Python Django中的項目的實際應(yīng)用操作方案有不解之處的話,你可以通過我們的文章對Python Django中的項目在實際操作有一個詳細的介紹,以下就是文章內(nèi)容的具體介紹。望你會有所收獲。
Python Django項目中報
- 'ascii' codec can't decode byte 0xe6 in position
15: ordinal not in range(128)
現(xiàn)在來跟蹤一下這個BUG??匆幌乱绾谓鉀Q第一種情況:
- try:
- return HttpResponse("<script>alert);
</script><script>window.location.href
='/serverinfolist/levels/?t_id="+app_id+"';</script>")- except Exception,e:
- logging.debug(e)
這樣的寫就報這個錯了。初步我感覺問題應(yīng)該是出在:JS寫法上面導(dǎo)致的!網(wǎng)上追蹤:一個很關(guān)鍵的并且要常記住的,就是代碼中所有字符串都統(tǒng)一使用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'北京'一樣的會報這樣的錯誤!總結(jié):如果想使用%s 的格式化輸出的方式的話就必須要注意其前后兩者的編碼方式保持一致。要不然就會報這種錯誤!
由UnicodeDecodeError可猜想得到,解析器嘗試使用ascii對'%s歡迎您!'進行解碼,由于'%s歡迎您!'實際是使用utf-8編碼的(這是我系統(tǒng)終端默認的),所以使用ascii解碼肯定會錯'%s歡迎你' 解析器會嘗試使用ascii對其做解碼處理。由于默認我們?yōu)閡tf-8所以出錯
PS: 引自一段對話摘要如下:
str轉(zhuǎn)成unicode不是直接構(gòu)造,是用str對象的decode方法。str的編碼是與系統(tǒng)環(huán)境相關(guān)的,一般就是sys.getfilesystemencoding()得到的值unicode你可以不管它是怎么存的,就把它看做是系統(tǒng)能夠識別其中內(nèi)容的文本類型所以從unicode轉(zhuǎn)str,被看做是把一個信息文本編碼為二進制字節(jié)流的過程,要用encode方法.
從str轉(zhuǎn)unicode,看作是從二進制串出解讀出有意義的信息文本,所以要用decode其中的str 可以看成是一個對象處理!現(xiàn)在我將代碼寫成如下:
- return
- HttpResponse("<script>alert('操作成功!');</script>
- <script>window.location.href='/serverinfolist/levels/?t_id=%s';</script>" % app_id.decode('utf-8'))
還是繼續(xù)報。想起來之前遇到的BT問題。解決辦法:
- return HttpResponseRedirect("/serverinfolist/levels/?t_id="+app_id)
這樣就可以解決了。
【編輯推薦】