色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

解決Python解釋器讀取的字符集識別問題

454398 ? 來源:博客園 ? 作者:Z賀 ? 2020-12-31 11:04 ? 次閱讀

Python初學者編碼實踐中經常遇到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、百度的時候,大家都建議在代碼文件頭加上字符集定義:
# -*- coding: utf-8 -*-

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

我們需要理解兩個概念:

1)、# -*- coding: utf-8 -*- 的作用是聲明 python源代碼文件的編碼格式。 誰會讀取Python的源代碼呢? 一個是IDE編輯工具,比如pycharm,nodpad++,editpluss等,我們在寫代碼的時候使用。

2)、另一個是Python解釋器,是執行Python程序的時候使用。

當我們使用IDE編輯器打開Python代碼的時候,如果出現亂碼,我們都知道是編輯器的解碼方式和代碼文件的編碼方式不一致導致的。需要修改編輯器的解碼方式。

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

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

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

2、在print的時候出現異常,或者寫文件,或者解析網絡報文,或者做str對象處理的時候出現亂碼。

這個時候我們需要理解:

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

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

3)、字符編碼基本可分為三大類:起源于美國的ASCII,支持英文字符、數字、標點符號、鍵盤上的特殊字符;國際編碼unicode,支持ascII的字符集外,又支持中文,韓語,日語等。因為unicode占用空間大,所以又出現了utf-8。需要強調的一點是:

unicode:簡單粗暴,所有字符都是2Bytes,優點是字符->數字的轉換速度快,缺點是占用空間大

utf-8:精準,對不同的字符用不同的長度表示,優點是節省空間,缺點是:字符->數字的轉換速度慢,因為每次都需要計算出字符需要多長的Bytes才能夠準確表示

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

2.硬盤中或者網絡傳輸用utf-8,網絡I/O延遲或磁盤I/O延遲要遠大與utf-8的轉換延遲,而且I/O應該是盡可能地節省帶寬,保證數據傳輸的穩定性。

下面詳細介紹了unicode和utf-8的使用場景:

在程序執行之前,內存中確實都是unicode編碼的二進制,比如從文件中讀取了一行x="egon",其中的x,等號,引號,地位都一樣,都是普通字符而已,都是以unicode編碼的二進制形式存放與內存中的

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

針對python3如下圖

o4YBAF9uKPmAfXDIAANLAfxpakc336.png

瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器

pIYBAF9uKPqARsmsAAAhiFKaqcs00.jpeg

如果服務端encode的編碼格式是utf-8, 客戶端內存中收到的也是utf-8編碼的二進制。

從上面的說明,我們知道了unicode和utf-8的應用場景,就需要用下面的方式進行轉換:

字符串通過編碼轉換為字節碼,字節碼通過解碼轉換為字符串

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

編輯:hfy


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4793

    瀏覽量

    84634
  • UTF-8
    +關注

    關注

    0

    文章

    13

    瀏覽量

    7849
收藏 人收藏

    評論

    相關推薦

    LCD液晶顯示漢字字符集

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

    如何查詢Oracle client端的字符集

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

    RISC-V MCU IDE MRS(MounRiver Studio)開發之:設置工程編碼字符集

    字符是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。字符集是多個字符的集合,字符集種類繁多,每個字符集包括的
    發表于 11-23 10:20

    怎樣去使用C語言字符集呢?有哪些規則

    C語言字符集的特點有哪些呢?怎樣去使用C語言字符集呢?有哪些規則?
    發表于 02-25 07:43

    python正則表達式字符集

    對比上面例子中輸出的結果來理解。我們都知道,正則表達式本身就定義了一些規則,比如 \d,匹配所有數字字符,其實它是等價于 [0-9],下面也寫了個例子,通過字符集的形式解釋了這些特殊字符
    發表于 03-17 16:48

    字符集和字庫有什么聯系?

    字符集和字庫 是同一個對象嗎
    發表于 10-12 06:29

    SVM在小字符集手寫體漢字識別中的應用研究

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

    信息交換用藏文編碼字符集標準 GB16959-1997

    信息交換用藏文編碼字符集標準 GB16959-1997 本標準是根據GB13000.1和國際標準化組織正在補充制定的信息交換藏文編碼字符集標準編制的。
    發表于 04-17 14:40 ?14次下載

    LCD液晶顯示漢字字符集

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

    字符集字符集編碼詳解

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

    MySQL字符集的設置修改和排序規則

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

    python正則表達式字符集

    字符集是由一對方括號 “[]” 括起來的字符集合。使用字符集,可以匹配多個字符中的一個。 舉個例子,比如你使用 C[ET]O 匹配到的是 CEO 或 CTO ,也就是說 [ET] 代表
    的頭像 發表于 03-17 16:48 ?1233次閱讀

    一文帶你搞懂字符集編碼

    軟件開發人員經常遇到“中文亂碼”、“軟件不能顯示日文”等類似問題。真相只有一個——對字符集編碼沒有一個系統的認知。
    的頭像 發表于 06-09 10:20 ?1501次閱讀
    一文帶你搞懂<b class='flag-5'>字符集</b>編碼

    一文詳解字符集編碼

    軟件開發人員經常遇到“中文亂碼”、“軟件不能顯示日文”等類似問題。真相只有一個——對字符集編碼沒有一個系統的認知。
    的頭像 發表于 07-18 09:57 ?650次閱讀
    一文詳解<b class='flag-5'>字符集</b>編碼

    mysql8.0默認字符集是什么

    MySQL 8.0 默認字符集是 utf8mb4。 MySQL 8.0 是當前最新的開源關系型數據庫管理系統,由Oracle公司開發和維護。MySQL 8.0 默認字符集是 utf8mb4,這個字符集
    的頭像 發表于 11-16 14:48 ?1805次閱讀
    主站蜘蛛池模板: av网站视频在线观看| 久久全国免费久久青青小草| 中文字幕不卡在线高清| 日本欧美久久久久免费播放网| 蝴蝶中文综合娱乐网2| 边做边爱BD免费看片| 伊人久久精品午夜| 婷婷四房播客五月天| 女厕所边摸边吃奶边做爽视频| 国产午夜精品一区二区| yellow在线中文| 中国女人精69xxxxxx视频| 小夫妻天天恶战| 琪琪电影午夜理论片YY6080| 久久国产精品免费网站| 国产色无码精品视频国产| jizzxxxx18中国内地| 真实处破女全过程完免费观看| 婷婷射精AV这里只有精品| 轻轻cao| 久久亚洲这里只有精品18| 韩国精品韩国专区久久| 国产成人精品视频免费大全| 柏木舞子在线| 99re久久超碰视频精品| 20岁αsrian男同志免费| 一个人HD高清在线观看免费视频 | 亚洲破处女| 午夜伦理一yy4480影院| 日本久久黄色| 欧美动物交ideos| 免费精品国产人妻国语| 老师机影院| 伦理 电影在线观看百度影音| 无人区免费一二三四乱码| 热久久国产欧美一区二区精品| 魅男mangay| 男女全黄h全肉细节文| 蜜芽资源高清在线观看| 奶水太多h室友| 女性私密五月天|