亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python 中文亂碼問題深入分析

2020-01-04 19:28:51
字體:
供稿:網(wǎng)友

在本文中,以'哈'來解釋作示例解釋所有的問題,“哈”的各種編碼如下:
1. UNICODE (UTF8-16),C854;
2. UTF-8,E59388;
3. GBK,B9FE。
一、python中的str和unicode
一直以來,python中的中文編碼就是一個(gè)極為頭大的問題,經(jīng)常拋出編碼轉(zhuǎn)換的異常,python中的str和unicode到底是一個(gè)什么東西呢?
在python中提到unicode,一般指的是unicode對(duì)象,例如'哈哈'的unicode對(duì)象為
u'/u54c8/u54c8'
而str,是一個(gè)字節(jié)數(shù)組,這個(gè)字節(jié)數(shù)組表示的是對(duì)unicode對(duì)象編碼(可以是utf-8、gbk、cp936、GB2312)后的存儲(chǔ)的格式。這里它僅僅是一個(gè)字節(jié)流,沒有其它的含義,如果你想使這個(gè)字節(jié)流顯示的內(nèi)容有意義,就必須用正確的編碼格式,解碼顯示。
例如:

python 中文亂碼問題深入分析


對(duì)于unicode對(duì)象哈哈進(jìn)行編碼,編碼成一個(gè)utf-8編碼的str-s_utf8,s_utf8就是是一個(gè)字節(jié)數(shù)組,存放的就是'/xe5/x93/x88/xe5/x93/x88',但是這僅僅是一個(gè)字節(jié)數(shù)組,如果你想將它通過print語句輸出成哈哈,那你就失望了,為什么呢?

因?yàn)閜rint語句它的實(shí)現(xiàn)是將要輸出的內(nèi)容傳送了操作系統(tǒng),操作系統(tǒng)會(huì)根據(jù)系統(tǒng)的編碼對(duì)輸入的字節(jié)流進(jìn)行編碼,這就解釋了為什么utf-8格式的字符串“哈哈”,輸出的是“鍝堝搱”,因?yàn)?'/xe5/x93/x88/xe5/x93/x88'用GB2312去解釋,其顯示的出來就是“鍝堝搱”。這里再強(qiáng)調(diào)一下,str記錄的是字節(jié)數(shù)組,只是某種編碼的存儲(chǔ)格式,至于輸出到文件或是打印出來是什么格式,完全取決于其解碼的編碼將它解碼成什么樣子。

這里再對(duì)print進(jìn)行一點(diǎn)補(bǔ)充說明:當(dāng)將一個(gè)unicode對(duì)象傳給print時(shí),在內(nèi)部會(huì)將該unicode對(duì)象進(jìn)行一次轉(zhuǎn)換,轉(zhuǎn)換成本地的默認(rèn)編碼(這僅是個(gè)人猜測)

二、str和unicode對(duì)象的轉(zhuǎn)換

str和unicode對(duì)象的轉(zhuǎn)換,通過encode和decode實(shí)現(xiàn),具體使用如下:

將GBK'哈哈'轉(zhuǎn)換成unicode,然后再轉(zhuǎn)換成UTF8

三、Setdefaultencoding

python 中文亂碼問題深入分析

如上圖的演示代碼所示:

當(dāng)把s(gbk字符串)直接編碼成utf-8的時(shí)候,將拋出異常,但是通過調(diào)用如下代碼:

import sys

reload(sys)

sys.setdefaultencoding('gbk')

四、操作不同文件的編碼格式的文件

建立一個(gè)文件test.txt,文件格式用ANSI,內(nèi)容為:

abc中文

用python來讀取

# coding=gbk

print open("Test.txt").read()

結(jié)果:abc中文

把文件格式改成UTF-8:

結(jié)果:abc涓鏂

顯然,這里需要解碼:

# coding=gbk

import codecs

print open("Test.txt").read().decode("utf-8")

結(jié)果:abc中文

上面的test.txt我是用Editplus來編輯的,但當(dāng)我用Windows自帶的記事本編輯并存成UTF-8格式時(shí),

運(yùn)行時(shí)報(bào)錯(cuò):

Traceback (most recent call last):

File "ChineseTest.py", line 3, in 

print open("Test.txt").read().decode("utf-8")

UnicodeEncodeError: 'gbk' codec can't encode character u'/ufeff' in position 0: illegal multibyte sequence

原來,某些軟件,如notepad,在保存一個(gè)以UTF-8編碼的文件時(shí),會(huì)在文件開始的地方插入三個(gè)不可見的字符(0xEF 0xBB 0xBF,即BOM)。

因此我們在讀取時(shí)需要自己去掉這些字符,python中的codecs module定義了這個(gè)常量:

# coding=gbk

import codecs

data = open("Test.txt").read()

if data[:3] == codecs.BOM_UTF8:

data = data[3:]

print data.decode("utf-8")

結(jié)果:abc中文

五、文件的編碼格式和編碼聲明的作用

源文件的編碼格式對(duì)字符串的聲明有什么作用呢?這個(gè)問題困擾一直困擾了我好久,現(xiàn)在終于有點(diǎn)眉目了,文件的編碼格式?jīng)Q定了在該源文件中聲明的字符串的編碼格式,例如:

str = '哈哈'

print repr(str)

a.如果文件格式為utf-8,則str的值為:'/xe5/x93/x88/xe5/x93/x88'(哈哈的utf-8編碼)

b.如果文件格式為gbk,則str的值為:'/xb9/xfe/xb9/xfe'(哈哈的gbk編碼)

在第一節(jié)已經(jīng)說過,python中的字符串,只是一個(gè)字節(jié)數(shù)組,所以當(dāng)把a(bǔ)情況的str輸出到gbk編碼的控制臺(tái)時(shí),就將顯示為亂碼:鍝堝搱;而當(dāng)把b情況下的str輸出utf-8編碼的控制臺(tái)時(shí),也將顯示亂碼的問題,是什么也沒有,也許'/xb9/xfe/xb9/xfe'用utf-8解碼顯示,就是空白吧。>_<

  • 聲明源文件中將出現(xiàn)非ascii編碼,通常也就是中文;
  • 在高級(jí)的IDE中,IDE會(huì)將你的文件格式保存成你指定編碼格式。
  • 決定源碼中類似于u'哈'這類聲明的將‘哈'解碼成unicode所用的編碼格式,也是一個(gè)比較容易讓人迷惑的地方,看示例:
  • #coding:gbk

    ss = u'哈哈'

    print repr(ss)

    print 'ss:%s' % ss

    將這個(gè)些代碼保存成一個(gè)utf-8文本,運(yùn)行,你認(rèn)為會(huì)輸出什么呢?大家第一感覺肯定輸出的肯定是:

    u'/u54c8/u54c8'

    ss:哈哈

    但是實(shí)際上輸出是:

    u'/u935d/u581d/u6431'

    ss:鍝堝搱

    為什么會(huì)這樣,這時(shí)候,就是編碼聲明在作怪了,在運(yùn)行ss = u'哈哈'的時(shí)候,整個(gè)過程可以分為以下幾步:

    1) 獲取'哈哈'的編碼:由文件編碼格式確定,為'/xe5/x93/x88/xe5/x93/x88'(哈哈的utf-8編碼形式)

    2) 轉(zhuǎn)成 unicode編碼的時(shí)候,在這個(gè)轉(zhuǎn)換的過程中,對(duì)于'/xe5/x93/x88/xe5/x93/x88'的解碼,不是用utf-8解碼,而是用聲明編碼處指定的編碼GBK,將'/xe5/x93/x88/xe5/x93/x88'按GBK解碼,得到就是''鍝堝搱'',這三個(gè)字的unicode編碼就是u'/u935d/u581d/u6431',至止可以解釋為什么print repr(ss)輸出的是u'/u935d/u581d/u6431' 了。

    好了,這里有點(diǎn)繞,我們來分析下一個(gè)示例:

    #-*- coding:utf-8 -*-

    ss = u'哈哈'

    print repr(ss)

    print 'ss:%s' % ss

    將這個(gè)示例這次保存成GBK編碼形式,運(yùn)行結(jié)果,竟然是:

    UnicodeDecodeError: 'utf8' codec can't decode byte 0xb9 in position 0: unexpected code byte

    這里為什么會(huì)有utf8解碼錯(cuò)誤呢?想想上個(gè)示例也明白了,轉(zhuǎn)換第一步,因?yàn)槲募幋a是GBK,得到的是'哈哈'編碼是GBK的編碼'/xb9/xfe/xb9/xfe',當(dāng)進(jìn)行第二步,轉(zhuǎn)換成 unicode的時(shí)候,會(huì)用UTF8對(duì)'/xb9/xfe/xb9/xfe'進(jìn)行解碼,而大家查utf-8的編碼表會(huì)發(fā)現(xiàn),utf8編碼表(關(guān)于UTF- 8解釋可參見字符編碼筆記:ASCII、UTF-8、UNICODE)中根本不存在,所以會(huì)報(bào)上述錯(cuò)誤。

    發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    久久99久久久久久| 97在线免费观看视频| 成人免费网站在线| 午夜久久中文| 久久国产精品亚洲人一区二区三区| 日本大胆欧美人术艺术动态| 久久国产天堂福利天堂| 2020国产精品久久精品不卡| mm131美女视频| 成人亲热视频网站| 99在线热播精品免费99热| 一级片手机在线观看| 国产盗摄视频一区二区三区| 在线a免费看| 日韩美女av在线| 亚洲天堂av资源在线观看| 成人午夜视屏| 黑人极品ⅴideos精品欧美棵| 97碰在线视频| 青娱乐国产在线| 亚洲天堂久久久| 1000部国产精品成人观看| 欧美一区二区三区在线观看| 久本草在线中文字幕亚洲欧美| 激情欧美一区二区三区黑长吊| 导航福利在线| 中文日韩欧美| 午夜宅男在线视频| 亚洲狼人在线| 日韩高清一区在线| а√天堂中文在线资源8| 欧美日韩伦理在线免费| 8x海外华人永久免费日韩内陆视频| 99精品免费观看| а√天堂资源在线| 波多野结衣在线高清| 国产伦精品一区二区三区免| 婷婷国产成人久久精品激情| 91年精品国产| 国产三级精品在线| 久久综合网色—综合色88| 精品国产中文字幕| 欧美精品久久久久性色| 久热免费在线观看| 欧美精品1区2区3区| 一级特黄a大片免费| 激情自拍一区| 丰满人妻一区二区| 国产精品zjzjzj在线观看| 台湾佬中文娱乐网欧美电影| 久久成人这里只有精品| 亚洲欧美国产精品专区久久| 污视频在线看操| 免费在线观看a| 欧美最新另类人妖| 亚洲视频一二区| 久久久精品国产亚洲| 亚洲aa在线观看| 亚洲中文字幕一区二区| 亚洲天堂成人在线| 三级特黄视频| 一级少妇精品久久久久久久| 日韩中文字幕国产精品| 欧美性猛交xxxx黑人猛交| 性欧美疯狂xxxxbbbb| 国产精品无码专区av免费播放| 欧美亚洲三级| 黄网页免费在线观看| 国产在视频一区二区三区吞精| 国产精品区一区| 艳妇乳肉亭妇荡乳av| 久久久久久天堂| 国产精品视频久久久久| 亚洲中文字幕一区二区| 精品国产一区二区三区在线| 亚洲专区**| 国产蜜臀av在线一区二区三区| 国产cdts系列另类在线观看| 日韩免费观看高清完整版在线观看| 日本高清视频网站| 黄色亚洲大片免费在线观看| 成人美女在线视频| 一区二区三区中文字幕精品精品| 日本护士做爰视频| 欧美视频一区二区在线观看| 国产一区二区自拍| 毛片在线免费播放| 欧美日韩国产综合一区二区三区| 91小视频在线播放| 婷婷久久综合九色综合绿巨人| 欧美激情第四页| 精品福利av| 中文天堂av| 欧美激情一区二区三区在线视频观看| 成年网站免费视频黄| 欧美伊人久久久久久久久影院| 日韩亚洲视频在线观看| 亚洲视频在线二区| 好吊色这里只有精品| jazzjazz国产精品久久| 久久成人福利视频| 亚欧在线观看视频| 久久久精品日韩| 野花社区视频在线观看| 欧美日韩系列| 青青青手机在线视频| 亚洲精品www久久久| 欧美一级淫片丝袜脚交| 舐め犯し波多野结衣在线观看| 在线观看成人av电影| 超碰手机在线观看| 国产毛片一区二区三区va在线| 日本在线观看一区二区| 成品网站w灬+源码1688网页| 亚洲成av人片在线| 日韩免费av片在线观看| 丝瓜app色版网站观看| 日韩av手机版| 欧美高清电影在线看| 丁香六月久久综合狠狠色| 国产成人精品999在线观看| 天天草夜夜操| 天天影视网天天综合色在线播放| 亚洲乱码av中文一区二区| 成人片免费看| 欧美午夜春性猛交xxxx| www.av视频| 嫩草嫩草嫩草嫩草| 中文字幕一区二区三区av| 色www免费视频| 777777国产7777777| 性色av蜜臀av色欲av| 欧美日韩免费一区二区三区| 欧美性受xxxx黑人猛交| 精品国产av鲁一鲁一区| 久久国产精品久久久| 色妞在线综合亚洲欧美| 日本不卡二三区| 欧美一区久久| 国产欧美综合在线观看第十页| 乱子伦一区二区三区| 一区二区三区在线视频免费观看| 婷婷丁香激情五月| 国内一区二区视频| 日本高清一区二区视频| 日韩www视频| 乱小说综合网站| 久久视频免费看| 性xx色xx综合久久久xx| 国产视频一区二区在线播放| 国产美女91呻吟求| 精品不卡在线视频| 99re视频在线观看| 91九色在线观看视频| 国内在线免费视频| 含羞草www国产在线视频| 深夜影院在线观看| 午夜视频一区二区在线观看| 国产伦精品一区二区三区免费| 好吊一区二区三区视频| 日韩在线欧美在线| 91精品1区| 久久久久久免费视频| www.成人在线.com| 91麻豆蜜桃| 91久久伊人青青碰碰婷婷| 一级在线免费视频| 成人黄动漫网站| 中文字幕精品在线| 久久久久亚洲| 国产精品成人69xxx免费视频| 一区二区欧美在线观看| 国产欧美精品久久久| 国产91在线观看| a视频网址在线观看| 色婷婷精品大视频在线蜜桃视频| 秋霞午夜一区二区| 国产嫩草影院久久久久| 九九精品免费视频| 欧美va亚洲va| 国产精品亚洲综合| 午夜在线观看一区| 欧美自拍偷拍午夜视频| 久久久久亚洲AV成人网人人小说| 日韩精品首页| 天天综合网91| 香蕉视频1024| 日本高清不卡免费| 美女国产一区| 久久精品一区二区三区不卡牛牛| 成人福利视频在线看| 日韩精品一区二区三区四| 最近中文字幕免费mv视频多少集| 91香蕉视频在线观看视频| 天天色av.com| 国产亚洲精品久久久| 欧美日韩一区二区视频在线| 国产午夜精品美女视频明星a级| 韩国三级大全久久网站| 9i看片成人免费高清| 麻豆一区产品精品蜜桃的特点| 成人国产精品毛片| 国产无人区码熟妇毛片多| 欧美另类女人| 国产精品第七十二页| 日韩欧美一区二区三区在线| 色爱精品视频一区| 亚洲电影免费观看高清完整版在线| 亚洲国内精品视频| 成人激情在线播放| 久久精品无码中文字幕| 污版视频在线观看| 亚洲一区精品在线| 手机av免费在线观看| 欧美 亚洲 另类 激情 另类| 日韩大陆欧美高清视频区| 久久av综合| 精品无人区卡一卡二卡三乱码免费卡| 天堂蜜桃91精品| 懂色av噜噜一区二区三区av| 亚洲第一精品区| av成人天堂| 国产大尺度在线观看| 免费在线观看a视频| 日韩在线一区二区视频| 国产黄色在线看| 亚洲欧美自拍偷拍| 欧美一区二区二区| 91精品人妻一区二区三区四区| 久久久久人妻一区精品色欧美| 日韩成人高清在线| 国产欧美69| 男人j桶女人的网站| 拍拍拍999自拍偷| 亚洲成人免费| 亚洲人成色777777老人头| 四虎影院在线域名免费观看| 国产欧美一区二区三区网站| 免费日韩在线视频| 香蕉视频国产精品| 国产精品v日韩精品v欧美精品网站| 国产69精品久久app免费版| 精品一卡二卡三卡| 日本精品久久久久久久久久| 亚洲理论中文字幕| 国产欧美韩国高清| 日韩欧美999| 欧美视频网站| 中文字幕中文字幕一区三区| 欧美变态tickle挠乳网站| 日本一区午夜艳熟免费| 好吊色视频988gao在线观看| 一级黄色在线观看| 99国产超薄丝袜足j在线观看| 一区三区视频| 一区二区三区中文字幕| 国模套图日韩精品一区二区| 日韩电影免费观看高清完整版| 91精东传媒理伦片在线观看| 午夜日韩电影| 久久国产精品久久久久久小说| 波多野吉衣中文字幕| 国内外成人免费激情视频| 欧美一级搡bbbb搡bbbb| 亚洲在线观看一区| 亚洲人成亚洲精品| 国产精品第二页| 不卡的av影片| 久久久久一区二区三区| 亚洲熟妇av一区二区三区漫画| 91久久久免费一区二区| 欧美在线视频观看| 国内自拍视频在线观看| 手机福利小视频在线播放| 亚洲色婷婷久久精品av蜜桃| 欧美成人女星排名| 老女人av在线| 友田真希在线| 久热在线观看视频| 欧美孕妇性xxxⅹ精品hd| 综合视频一区| 日本福利片免费看| 天堂网在线免费观看| 国产一区二区三区免费观看| 久久久久无码国产精品一区李宗瑞| 精品国产91亚洲一区二区三区婷婷| 成人国产1314www色视频| 国产+成+人+亚洲欧洲自线| 精品久久人人做人人爽| 久久.com| 一道精品视频一区二区三区男同| 日韩.com| 欧美成人午夜精品免费| 午夜影院在线视频| 国产精品不卡一区二区三区在线观看| 久久免费精品国产久精品久久久久| 九色精品国产蝌蚪| 国产精品久久久av久久久| 国产成人亚洲欧美| 五月开心六月丁香综合色啪| 大尺度在线观看| 久久精品中文字幕免费mv| 欧美日韩性视频一区二区三区| 亚洲一区在线视频观看| 久久艳妇乳肉豪妇荡乳av| 免费在线观看一区| 色狠狠av一区二区三区| 国产精品视频播放| 天堂av在线8| 男女男精品视频站| 先锋影音男人站你懂得| 麻豆一区二区三区四区精品蜜桃| 久久成人亚洲| 免费网站成人| 欧美日本一区二区视频在线观看| 免费在线观看日韩欧美| 91免费的视频在线播放| …久久精品99久久香蕉国产| 国产综合色产| 天天干夜夜艹| 八戒八戒神马在线电影| 亚洲免费网站| 精品夜夜嗨av一区二区三区| 26uuu精品一区二区三区四区在线| 国产91露脸中文字幕在线| 中文字幕精品在线| 日韩电影免费在线观看| 蜜桃一区二区|