2019 08 07學習整理

2022-08-13 06:15:16 字數 2634 閱讀 6467

字元編碼是將人類的字元編碼成計算機能識別的數字,這種轉換必須遵循一套固定的標準,該標準無非是人類字元與數字的對應關係,稱之為字元編碼表。

計算機由美國人發明,最早的字元編碼為ascii,只規定了英文本母數字和一些特殊字元與數字的對應關係。最多只能用 8 位來表示(乙個位元組),即:2**8 = 256,所以,ascii碼最多只能表示 256 個符號。

當然我們程式語言都用英文沒問題,ascii夠用,但是在處理資料時,不同的國家有不同的語言,中國人會加入中文,日本人會在自己的程式中加入日文,南韓人也是。

但是要表示中文,單拿乙個位元組表表示乙個漢子,是不可能表達完的(連小學生都認識兩千多個漢字),解決方法只有乙個,就是乙個位元組用》8位2進製代表,位數越多,代表的變化就多,這樣,就可以盡可能多的表達出不通的漢字。

所以中國人規定了自己的標準gb2312編碼,規定了包含中文在內的字元與數字的對應關係。

日本人規定了自己的shift_jis編碼;南韓人規定了自己的euc-kr編碼(另外,南韓人說,計算機是他們發明的,要求世界統一用南韓編碼,但世界人民沒有搭理他們)。

這時候問題出現了,精通18國語言的小周同學謙虛的用8國語言寫了一篇文件,那麼這篇文件,按照哪國的標準,都會出現亂碼(因為此刻的各種標準都只是規定了自己國家的文字在內的字元跟數字的對應關係,如果單純採用一種國家的編碼格式,那麼其餘國家語言的文字在解析時就會出現亂碼)。所以迫切需要乙個世界的標準(能包含全世界的語言)於是unicode應運而生(南韓人表示不服,然後沒有什麼卵用)。

ascii用1個位元組(8位二進位制)代表乙個字元;unicode常用2個位元組(16位二進位制)代表乙個字元,生僻字需要用4個位元組。

例:字母x,用ascii表示是十進位制的120,二進位制0111 1000。

漢字中已經超出了ascii編碼的範圍,用unicode編碼是十進位制的20013,二進位制的01001110 00101101。

字母x,用unicode表示二進位制0000 0000 0111 1000,所以unicode相容ascii,也相容萬國,是世界的標準。

這時候亂碼問題消失了,所有的文件我們都使用但是新問題出現了,如果我們的文件通篇都是英文,你用unicode會比ascii耗費多一倍的空間,在儲存和傳輸上十分的低效。

本著節約的精神,又出現了把unicode編碼轉化為「可變長編碼」的utf-8(unicode transformation format-8)編碼。utf-8編碼把乙個unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文本母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文字包含大量英文本元,用utf-8編碼就能節省空間:

字元ascii

unicode

utf-8

a01000001

00000000 01000001

01000001中x

01001110 00101101

11100100 10111000 10101101

從上面的**還可以發現,utf-8編碼有乙個額外的好處,就是ascii編碼實際上可以被看成是utf-8編碼的一部分,所以,大量只支援ascii編碼的歷史遺留軟體可以在utf-8編碼下繼續工作。

記憶體中還使用unicode編碼,是因為歷史遺留問題造成的,但是因為現在寫**使用的都是utf-8**,所以以後記憶體中的**都將變成utf-8**,並且以前遺留的各個國家的**都將被淘汰,所以未來記憶體中使用的編碼也將使用utf-8編碼替代unicode編碼。

首先明確概念

亂碼的兩種情況:

存檔案時,由於檔案內有各個國家的文字,我們單以shiftjis去存,

本質上其他國家的文字由於在shiftjis中沒有找到對應關係而導致儲存失敗。但當我們硬要存的時候,編輯並不會報錯(難道你的編碼錯誤,編輯器這個軟體就跟著崩潰了嗎???),但毫無疑問,不能存而硬存,肯定是亂存了,即存檔案階段就已經發生亂碼,而當我們用shiftjis開啟檔案時,日文可以正常顯示,而中文則亂碼了。

存檔案時用utf-8編碼,保證相容萬國,不會亂碼,而讀檔案時選擇了錯誤的解碼方式,比如gbk,則在讀階段發生亂碼,讀階段發生亂碼是可以解決的,選對正確的解碼方式就ok了。

1.1執行python程式的三個階段

件操作的基礎模式有三種(預設的操作模式為r模式):

檔案讀寫內容的格式有兩種(預設的讀寫內容的模式為b模式):

需要注意的是:t、b這兩種模式均不能單獨使用,都需要與r/w/a之一連用

r: read,唯讀模式,只能讀不能寫,檔案不存在時報錯。

f.read()讀取檔案指標會跑到檔案的末端,如果再一次讀取,讀取的將是空格。

w: 只能寫,不能讀,檔案存在的時候回清空檔案後再寫入內容;檔案不存在的時候會建立檔案後寫入內容。

a: 可以追加。檔案存在,則在檔案的末端寫入內容;檔案不存在的時候會建立檔案後寫入內容。

b模式是通用的模式,因為所有的檔案在硬碟中都是以二進位制的形式儲存的,需要注意的是:b模式讀寫檔案,一定不能加上encoding引數,因為二進位制無法再編碼

with open()方法不僅提供自動釋放作業系統占用的方法,並且with open可以使用逗號分隔,一次性開啟多個檔案,實現檔案的快速拷貝。

with open('32.txt', 'rb') as fr, \

open('35r.txt', 'wb') as fw:

f.write(f.read())

2019 08 07 NOIP提高組 模擬 A 組

今天的比賽做的不好,t1很簡單,但是我竟然沒有想到。t1 首先,對於f 1 n 1 1的做法十分顯然,直接矩乘就可以了。然後,對於這一道題,我們發現最終的f n 一定是由f 1 f 2 f k 的某個次冪分別乘起來的,那麼我們就可以分開處理每乙個f i 的最終指數,具體做法和上面一樣。總結 1 重申...

計算機視覺相關乾貨文章 20190807

計算機視覺相關乾貨文章 20190807 計算機視覺方向簡介 從全景圖恢復三維結構 計算機視覺方向簡介 陣列相機立體全景拼接 計算機視覺方向簡介 單目微運動生成深度圖 計算機視覺方向簡介 深度相機室內實時稠密三維重建 計算機視覺方向簡介 深度圖補全 計算機視覺方向簡介 人體骨骼關鍵點檢測綜述 計算機...

20190807 排序陣列刪除重複項

力扣簡單習題 留乙個計數君,碰到不一樣的,就將計數君 1,並在此索引處直接將第二個值填充即可。package com.immunize.leetcode.delete same leetcode 根據輸入的陣列,刪除相同的值,且要在位置不變的情況下刪除,在原陣列裡的原位置上刪除,超出的位置不計 例 ...