chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

解決Python解釋器讀取的字符集識(shí)別問(wèn)題

454398 ? 來(lái)源:博客園 ? 作者:Z賀 ? 2020-12-31 11:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Python初學(xué)者編碼實(shí)踐中經(jīng)常遇到encode error,decode error,如下:

例1:
UnicodeEncodeError: 'ascii' codec can't encode character u'/u5728' in position 1

例2:
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 0-1: invalid continuation byte

1、百度的時(shí)候,大家都建議在代碼文件頭加上字符集定義:
# -*- coding: utf-8 -*-

這種方法大部分情況下可以解決大部分的問(wèn)題。那么它解決的是什么問(wèn)題呢?

我們需要理解兩個(gè)概念:

1)、# -*- coding: utf-8 -*- 的作用是聲明 python源代碼文件的編碼格式。 誰(shuí)會(huì)讀取Python的源代碼呢? 一個(gè)是IDE編輯工具,比如pycharm,nodpad++,editpluss等,我們?cè)趯懘a的時(shí)候使用。

2)、另一個(gè)是Python解釋器,是執(zhí)行Python程序的時(shí)候使用。

當(dāng)我們使用IDE編輯器打開(kāi)Python代碼的時(shí)候,如果出現(xiàn)亂碼,我們都知道是編輯器的解碼方式和代碼文件的編碼方式不一致導(dǎo)致的。需要修改編輯器的解碼方式。

那么Python解釋執(zhí)行Python程序的時(shí)候使用的是設(shè)么解碼方式呢?可以用下面的方式查看:
sys.getdefaultencoding()

可以用下面的方式修改:
reload(sys)
sys.setdefaultencoding('utf-8')
sys.getdefaultencoding()

所以,代碼文件第一行加 字符集定義,解決Python解釋器讀取Python代碼文件時(shí)的字符集識(shí)別問(wèn)題

2、在print的時(shí)候出現(xiàn)異常,或者寫文件,或者解析網(wǎng)絡(luò)報(bào)文,或者做str對(duì)象處理的時(shí)候出現(xiàn)亂碼。

這個(gè)時(shí)候我們需要理解:

1)、文件讀寫、網(wǎng)絡(luò)報(bào)文讀寫都可以理解為IO讀寫。是byte處理,所以讀寫前后需要使用同樣的字符編碼方式。

2)、print、str對(duì)象的處理涉及到終端的編碼格式。print之后,在pycharm的輸出窗口,或者windows的CMD命令行窗口,或者Linux的shell窗口,需要適配終端的編碼方式

3)、字符編碼基本可分為三大類:起源于美國(guó)的ASCII,支持英文字符、數(shù)字、標(biāo)點(diǎn)符號(hào)、鍵盤上的特殊字符;國(guó)際編碼unicode,支持ascII的字符集外,又支持中文,韓語(yǔ),日語(yǔ)等。因?yàn)閡nicode占用空間大,所以又出現(xiàn)了utf-8。需要強(qiáng)調(diào)的一點(diǎn)是:

unicode:簡(jiǎn)單粗暴,所有字符都是2Bytes,優(yōu)點(diǎn)是字符->數(shù)字的轉(zhuǎn)換速度快,缺點(diǎn)是占用空間大

utf-8:精準(zhǔn),對(duì)不同的字符用不同的長(zhǎng)度表示,優(yōu)點(diǎn)是節(jié)省空間,缺點(diǎn)是:字符->數(shù)字的轉(zhuǎn)換速度慢,因?yàn)槊看味夹枰?jì)算出字符需要多長(zhǎng)的Bytes才能夠準(zhǔn)確表示

1.內(nèi)存中使用的編碼是unicode,用空間換時(shí)間(程序都需要加載到內(nèi)存才能運(yùn)行,因而內(nèi)存應(yīng)該是盡可能的保證快)

2.硬盤中或者網(wǎng)絡(luò)傳輸用utf-8,網(wǎng)絡(luò)I/O延遲或磁盤I/O延遲要遠(yuǎn)大與utf-8的轉(zhuǎn)換延遲,而且I/O應(yīng)該是盡可能地節(jié)省帶寬,保證數(shù)據(jù)傳輸?shù)姆€(wěn)定性。

下面詳細(xì)介紹了unicode和utf-8的使用場(chǎng)景:

在程序執(zhí)行之前,內(nèi)存中確實(shí)都是unicode編碼的二進(jìn)制,比如從文件中讀取了一行x="egon",其中的x,等號(hào),引號(hào),地位都一樣,都是普通字符而已,都是以u(píng)nicode編碼的二進(jìn)制形式存放與內(nèi)存中的

但是程序在執(zhí)行過(guò)程中,會(huì)申請(qǐng)內(nèi)存(與程序代碼所存在的內(nèi)存是倆個(gè)空間),可以存放任意編碼格式的數(shù)據(jù),比如x="egon",會(huì)被python解釋器識(shí)別為字符串,會(huì)申請(qǐng)內(nèi)存空間來(lái)存放"egon",然后讓x指向該內(nèi)存地址,此時(shí)新申請(qǐng)的該內(nèi)存地址保存也是unicode編碼的egon,如果代碼換成x="egon".encode('utf-8'),那么新申請(qǐng)的內(nèi)存空間里存放的就是utf-8編碼的字符串egon了

針對(duì)python3如下圖

o4YBAF9uKPmAfXDIAANLAfxpakc336.png

瀏覽網(wǎng)頁(yè)的時(shí)候,服務(wù)器會(huì)把動(dòng)態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器

pIYBAF9uKPqARsmsAAAhiFKaqcs00.jpeg

如果服務(wù)端encode的編碼格式是utf-8, 客戶端內(nèi)存中收到的也是utf-8編碼的二進(jìn)制。

從上面的說(shuō)明,我們知道了unicode和utf-8的應(yīng)用場(chǎng)景,就需要用下面的方式進(jìn)行轉(zhuǎn)換:

字符串通過(guò)編碼轉(zhuǎn)換為字節(jié)碼,字節(jié)碼通過(guò)解碼轉(zhuǎn)換為字符串

str--->(encode)--->bytes,bytes--->(decode)--->str

編輯:hfy


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86709
  • UTF-8
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    7969
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    LCD液晶顯示漢字字符集

    LCD液晶顯示漢字字符集
    發(fā)表于 02-24 13:30

    如何查詢Oracle client端的字符集?

    什么是Oracle字符集?如何查詢dmp文件的字符集?如何查詢Oracle client端的字符集
    發(fā)表于 05-26 06:42

    RISC-V MCU IDE MRS(MounRiver Studio)開(kāi)發(fā)之:設(shè)置工程編碼字符集

    字符是各種文字和符號(hào)的總稱,包括各國(guó)家文字、標(biāo)點(diǎn)符號(hào)、圖形符號(hào)、數(shù)字等。字符集是多個(gè)字符的集合,字符集種類繁多,每個(gè)字符集包括的
    發(fā)表于 11-23 10:20

    怎樣去使用C語(yǔ)言字符集呢?有哪些規(guī)則

    C語(yǔ)言字符集的特點(diǎn)有哪些呢?怎樣去使用C語(yǔ)言字符集呢?有哪些規(guī)則?
    發(fā)表于 02-25 07:43

    python正則表達(dá)式字符集

    對(duì)比上面例子中輸出的結(jié)果來(lái)理解。我們都知道,正則表達(dá)式本身就定義了一些規(guī)則,比如 \d,匹配所有數(shù)字字符,其實(shí)它是等價(jià)于 [0-9],下面也寫了個(gè)例子,通過(guò)字符集的形式解釋了這些特殊字符
    發(fā)表于 03-17 16:48

    字符集和字庫(kù)有什么聯(lián)系?

    字符集和字庫(kù) 是同一個(gè)對(duì)象嗎
    發(fā)表于 10-12 06:29

    SVM在小字符集手寫體漢字識(shí)別中的應(yīng)用研究

    本文將支持向量機(jī)(SVM)引入到小字符集脫機(jī)手寫體漢字識(shí)別中。文章首先介紹了SVM的基本原理和主要算法,然后在實(shí)驗(yàn)中采用了LibSVM訓(xùn)練軟件,針對(duì)銀行票據(jù)手寫漢字的小字符集
    發(fā)表于 08-14 11:37 ?20次下載

    信息交換用藏文編碼字符集標(biāo)準(zhǔn) GB16959-1997

    信息交換用藏文編碼字符集標(biāo)準(zhǔn) GB16959-1997 本標(biāo)準(zhǔn)是根據(jù)GB13000.1和國(guó)際標(biāo)準(zhǔn)化組織正在補(bǔ)充制定的信息交換藏文編碼字符集標(biāo)準(zhǔn)編制的。
    發(fā)表于 04-17 14:40 ?14次下載

    LCD液晶顯示漢字字符集

    LCD液晶顯示漢字字符集
    發(fā)表于 12-23 02:02 ?0次下載

    字符集字符集編碼詳解

    字符集字符集編碼詳解
    發(fā)表于 09-12 08:33 ?4次下載
    <b class='flag-5'>字符集</b>與<b class='flag-5'>字符集</b>編碼詳解

    MySQL字符集的設(shè)置修改和排序規(guī)則

    大家都知道,計(jì)算機(jī)只能識(shí)別二進(jìn)制碼,為了讓計(jì)算機(jī)能處理文字,人們給每個(gè)文字進(jìn)行編碼,這個(gè)編碼就是計(jì)算機(jī)字符集的由來(lái)。
    的頭像 發(fā)表于 04-16 17:10 ?1.9w次閱讀
    MySQL<b class='flag-5'>字符集</b>的設(shè)置修改和排序規(guī)則

    python正則表達(dá)式字符集

    字符集是由一對(duì)方括號(hào) “[]” 括起來(lái)的字符集合。使用字符集,可以匹配多個(gè)字符中的一個(gè)。 舉個(gè)例子,比如你使用 C[ET]O 匹配到的是 CEO 或 CTO ,也就是說(shuō) [ET] 代表
    的頭像 發(fā)表于 03-17 16:48 ?1413次閱讀

    一文帶你搞懂字符集編碼

    軟件開(kāi)發(fā)人員經(jīng)常遇到“中文亂碼”、“軟件不能顯示日文”等類似問(wèn)題。真相只有一個(gè)——對(duì)字符集編碼沒(méi)有一個(gè)系統(tǒng)的認(rèn)知。
    的頭像 發(fā)表于 06-09 10:20 ?1860次閱讀
    一文帶你搞懂<b class='flag-5'>字符集</b>編碼

    一文詳解字符集編碼

    軟件開(kāi)發(fā)人員經(jīng)常遇到“中文亂碼”、“軟件不能顯示日文”等類似問(wèn)題。真相只有一個(gè)——對(duì)字符集編碼沒(méi)有一個(gè)系統(tǒng)的認(rèn)知。
    的頭像 發(fā)表于 07-18 09:57 ?900次閱讀
    一文詳解<b class='flag-5'>字符集</b>編碼

    mysql8.0默認(rèn)字符集是什么

    MySQL 8.0 默認(rèn)字符集是 utf8mb4。 MySQL 8.0 是當(dāng)前最新的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由Oracle公司開(kāi)發(fā)和維護(hù)。MySQL 8.0 默認(rèn)字符集是 utf8mb4,這個(gè)字符集
    的頭像 發(fā)表于 11-16 14:48 ?2252次閱讀