摘要:根本原因字符串在內(nèi)部的表示是編碼,因此,在做編碼轉(zhuǎn)換時(shí),通常需要以作為中間編碼,即先將其他編碼的字符串解碼成,再?gòu)木幊闪硪环N編碼。引用的中文編碼問(wèn)題
根本原因:
字符串在Python內(nèi)部的表示是unicode編碼,因此,在做編碼轉(zhuǎn)換時(shí),通常需要以u(píng)nicode 作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再?gòu)膗nicode編(encode) 成另一種編碼。但是,Python 2.x的默認(rèn)編碼格式是ASCII,就是說(shuō),在沒(méi)有指定Python源碼編碼 格式的情況下,源碼中的所有字符都會(huì)被默認(rèn)為ASCII碼。也因?yàn)檫@個(gè)根本原因,在Python 2.x中 經(jīng)常會(huì)遇到UnicodeDecodeError或者UnicodeEncodeError的異常。
常見的幾種編碼異常
當(dāng)然,除了上面列出的幾種出現(xiàn)異常的情況之外還有很多可能出現(xiàn)異常的例子,這里就不在一一
說(shuō)明了。
最后分享一個(gè)終極原則:
decode early, unicode everywhere, encode late,即:在輸入或者聲明字符串的時(shí)候, 盡早地使用decode方法將字符串轉(zhuǎn)化成unicode編碼格式;然后在程序內(nèi)使用字符串的時(shí)候統(tǒng)一使用 unicode格式進(jìn)行處理,比如字符串拼接、字符串替換、獲取字符串的長(zhǎng)度等操作;最后,在輸出字符 串的時(shí)候(控制臺(tái)/網(wǎng)頁(yè)/文件),通過(guò)encode方法將字符串轉(zhuǎn)化為你所想要的編碼格式,比如utf-8等。
引用WuXianglong的python中文編碼問(wèn)題
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37555.html
摘要:值得注意的是,有的編碼方案不一定能表示某些信息,這時(shí)編碼就會(huì)失敗,比如就不能用來(lái)表示中文。數(shù)組的每一項(xiàng)是一個(gè)字節(jié),用來(lái)表示。所以對(duì)于字符串來(lái)說(shuō),其長(zhǎng)度等于編碼后字節(jié)的長(zhǎng)度。所以,讓來(lái)編碼解碼中文,就超出了其能力范圍。 在人機(jī)交互之字符編碼 一文中對(duì)字符編碼進(jìn)行了詳細(xì)的討論,并通過(guò)一些簡(jiǎn)單的小程序驗(yàn)證了我們對(duì)于字符編碼的認(rèn)識(shí)。但僅了解這篇文章的內(nèi)容,并不能幫我們?cè)谌粘>幊讨卸氵^(guò)一些字符編...
摘要:之痛原文地址譯者校正實(shí)用編程指南這是我在所做的演講。事實(shí)一和二共同造成了計(jì)算機(jī)設(shè)備結(jié)構(gòu)與世界人類需求的一個(gè)沖突。就是為了解決之前的老的字符集問(wèn)題。值意味著,失敗時(shí)將會(huì)返回一個(gè)標(biāo)準(zhǔn)的替代字符。將使用進(jìn)行了解碼。 Unicode之痛原文地址: http://nedbatchelder.com/text...譯者: yudun1989 校正: sicklife實(shí)用Unicode編程指南這是...
摘要:而他們的中文釋義,就是對(duì)新手的最大陷阱編碼。而碼,也就是美國(guó)信息交換標(biāo)準(zhǔn)碼,年發(fā)布,位字符編碼中影響最大的一種。 編碼,還是編碼! python2的直鉤——編碼異常 當(dāng)你用python打開一篇中文文檔,準(zhǔn)備讀取里面的數(shù)據(jù)開始實(shí)驗(yàn)...當(dāng)你處理好你的數(shù)據(jù),打算打印出易于閱讀的結(jié)果給boss檢查...甚至當(dāng)你剛剛開始編寫自己的代碼,就寫了一句話... text = 什么鬼 只要你開始運(yùn)行自...
摘要:,,等屬于不同的字符集,轉(zhuǎn)換編碼就是在它們中的任意兩者間進(jìn)行。一般個(gè)人用的電腦上控制臺(tái)基本上都是編碼的,但運(yùn)維的機(jī)器上基本全是,中文的時(shí)候就會(huì)有酸爽的問(wèn)題。 總結(jié)總結(jié),本文僅適用于python2.x 默認(rèn)編碼與開頭聲明 首先是開頭的地方聲明編碼 # coding: utf8 這個(gè)東西的用處是聲明文件編碼為utf8(要寫在前兩行內(nèi)),不然文件里如果有中文,比如 a = 美麗 b = u美...
摘要:關(guān)于解決亂碼問(wèn)題的終極解決方案有個(gè)特別好玩的現(xiàn)象,當(dāng)我們?yōu)榱司幋a頭疼的時(shí)候,幾乎搜索到所有的文章都會(huì)先發(fā)一通牢騷。另外,關(guān)于的亂碼問(wèn)題,又是一個(gè)新的較長(zhǎng)篇章。 關(guān)于解決Python亂碼問(wèn)題的終極解決方案 (TL;DR) showImg(https://segmentfault.com/img/remote/1460000013229494?w=809&h=184); 有個(gè)特別好玩的現(xiàn)象...
閱讀 1028·2021-09-26 09:55
閱讀 3591·2021-09-24 10:30
閱讀 1377·2021-09-08 09:36
閱讀 2558·2021-09-07 09:58
閱讀 610·2019-08-30 15:56
閱讀 776·2019-08-29 18:32
閱讀 3630·2019-08-29 15:13
閱讀 1848·2019-08-29 13:49