欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

關于python2中的unicode和str以及python3中的str和bytes是怎樣的

本篇文章給大家分享的是有關關于python2中的unicode和str以及python3中的str和bytes是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

在洛川等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網站設計、成都網站建設、外貿網站建設 網站設計制作按需網站制作,公司網站建設,企業(yè)網站建設,成都品牌網站建設,全網整合營銷推廣,外貿營銷網站建設,洛川網站建設費用合理。

如果你 經常遇到這種錯誤提示的信息: UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128), 或者杯具的發(fā)現(xiàn)明明在Eclipse中寫的程序能夠正常運行然后到了終端下面就跳出以上的一段話.
那么, 就證明你和我一樣, 遇到了悲催的Python的編碼問題了.

之前在用Python語言寫我的畢業(yè)設計, 然后各種沒有問題, 直到整個東西完成了, 突發(fā)奇想想去試一下對中文的支持. 然后你懂的, 就彈出了以上一串惡心的錯誤提示, 然后改半天, 各種改, 各種錯誤, 然后各種想砸鍵盤. 其實之前的一篇日志中也說到了, 解決這一類的問題最好的方法就是在程序開頭加上以下幾行代碼:

import sys
reload(sys)
sys.setdefaultencoding(“utf-8″)


那么就可助你解決幾乎95%的這種問題, 但是如果想刨根問底的話, 就需要去了解很多東西了.

首先, 這個就是Python語言本身的問題. 因為在Python 2.x的語法中, 默認的str并不是真正意義上我們理解的字符串, 而是一個byte數組, 或者可以理解成一個純ascii碼字符組成的字符串, 與Python 3中的bytes類型的變量對應; 而真正意義上通用的字符串則是unicode類型的變量,
它則與Python 3中的str變量對應. 本來應該用作byte數組的類型, 卻被用來做字符串用, 這種看似奇葩的設定是Python 2一直被人詬病的東西, 不過也沒有辦法, 為了與之前的程序保持兼容.

在Python 2中作為兩種字符串類型, str與unicode之間就需要各種轉換的方式. 首先是一種顯式轉換的方式, 就是encode和decode兩種方法. 在這里這兩貨的意思很容易被搞反, 科學的調用方式是:

str --- decode方法 ---> unicode
unicode --- encode方法 ---> str

比如:

>>> type('x')
<type 'str'>
>>> type('x'.decode('utf-8'))
<type 'unicode'>
>>> type(u'x'.encode('utf-8'))
<type 'str'>


這個邏輯是這樣的, 對于unicode字符串使用utf-8編碼進行編碼, 即調用encode('utf-8')方法生成byte數組類型的結果. 相反對于byte數組進行解碼, 生成unicode字符串. 這個新手表示理解不能, 不過熟悉了就見怪不怪了.

另外是隱式的轉換, 和C語言中的int轉double類似, 當一個unicode字符串和一個str字符串進行連接的時候會默認自動將str字符串轉換成unicode類型然后再連接. 而這個時候使用的編碼方式則是系統(tǒng)所默認的編碼方式. 使用:

import sys
print sys.getdefaultencoding()


可以得到當前默認的編碼方式, 是不是'ascii'? 是的話就恭喜你中彩了~!! 在這個時候如果有以下一行代碼就保證會出錯:

>>> x = u'喵'
>>> x
u'\u55b5'
>>> y = x.encode('utf-8')
>>> x + y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)


x是unicode類型的變量, y是x經過encode后的結果是str類型的變量. x + y的時候, 首先要將y轉換成unicode字符串, 那么使用什么編碼格式轉換呢, 用utf-8還是gb2312或者還是utf-16? 這個時候就要根據sys.getdefaultencoding()來確定,
而sys.getdefaultencoding()是'ascii'編碼, 在ascii字符表中不存在0xe5這種大于128的字符存在, 所以當然報錯啦! 通過加入

import sys
reload(sys)
sys.setdefaultencoding(“utf-8″)


則可以將默認的編碼轉換格式變成utf-8, 且大多數情況下, 程序中的字符串是通過utf-8來編碼的, 所以只要加上以上三行就可以了.

但是有沒有覺得, 加上這些會使得代碼有些dirty? 咳, 至少對于我來說確實很dirty. 所以我覺得平時寫程序的過程中要養(yǎng)成盡量使用顯示的轉換的習慣, 并且要明確某個函數返回的到底是str還是unicode, 凡是str的主動decode成unicode, 不要將兩者混淆掉, 這樣寫出來的代碼才比較干凈. 此外還可以在代碼最上方加入'from
__future__ import unicode_literals'可以默認將用戶自定義字符串變成unicode類型.
最后我想大吼一聲Python 2.x中str不是字符串, 而是BYTE數組~!

以上就是關于python2中的unicode和str以及python3中的str和bytes是怎樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享標題:關于python2中的unicode和str以及python3中的str和bytes是怎樣的
URL鏈接:http://aaarwkj.com/article40/jjphho.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站制作、建站公司、營銷型網站建設標簽優(yōu)化、網頁設計公司品牌網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站建設
日韩三级黄片在线观看| 国产精品va在线观看入口| 美日韩黄色大片免费看| 线上免费看黄色亚洲片| 国产精品国产三级国产不产一地| 男人天堂手机视频在线| 日本三卡=卡无人区| 国产av一区二区三区| 国产精品高清呻吟久久久| 国产欧美日韩一区二区三区不卡| 午夜在线观看视频免费| 激情五月天色婷婷久久| 欧美午夜视频一区二区福利| 传媒视频免费在线观看| 青青草原天堂在线免费观看| 91精品人妻二区三区| 亚洲天堂精品日韩电影| 亚洲啪啪av一区二区三区| 羞羞av一区二区三区| 91中文在线观看一区| 邻居少妇扒开腿让我爽了一夜| 日本的一级片一区二区| 91九色最新国产在线| 精品一区二区在线欧美日韩| 日韩视频精品一区二区| 欧美看黄网站在线观看| 亚洲国产精品一区一区| 日本中文字幕免费专区| 日韩中字在线一区二区| 午夜精品一区二区三区在线视频| 免费亚洲一级黄色录像| 亚洲精品国产二区中文字幕| av熟女乱一区二区三区| 亚洲国产成人午夜精品| 日韩一二三四区免费观看| 国产剧情av在线资源| 深夜毛片一区二区三区| 久久精品视频就在久久| 97成人在线视频免费| 国产精品一区二区av在线| 成人黄色三级免费网站|