心得:馬雲所說:"工作是水,生活是酒。水會決定酒的質量,但生活,要過得像酒一樣,不可以像水一樣,沒有味道。"但我更在意酒的質量.
編碼格式
我們都知道計算的編碼型別是0和1,但具體怎麼執行的我們也看不到,我們生活中常常接觸到的是各式各樣的字元,那我們這些字元和對應的0和1是怎麼轉換的,其實每一種字元都可以用二進位制數表示,例如小寫英文本母,數字等等,都屬於ascii碼,但ascii碼是用乙個位元組七位表示的,也就是說,它最大表示的個數為2^7也就是128種字元。但每種語言都是不同的字元,這得需要同一的編碼格式大家才能有效的和計算機交流。看看常用的編碼都有那些吧。
ascii碼
它是用乙個位元組中的七位表示,共有128個,包括各種字元。也是常用的一種,但依然不夠用。
iso-8859-1
產生了iso-8859-1格式,它是用乙個位元組八位表示,有2^8也就是256種,相當於ascii碼的擴充套件碼,涵蓋了大多數西歐語言字元,計算機內部常用。
gb2313/gbk
國標漢字的表示擴充套件規範,gbk是採用單雙位元組變長編碼,英文使用單位元組編碼,完全相容ascii字元編碼,中文部分採用雙位元組編碼。
unicode
統一碼,萬國碼,兩個位元組表示乙個字元。缺陷占用空間。
unicode是國際組織制定的可以容納世界上所有文字和符號的字元編碼方案。目前的unicode字元分為17組編排,0x0000 至 0x10ffff,每組稱為平面(plane),而每平面擁有65536個碼位,共1114112個。
uft-8編碼
utf-8是以位元組單位對unicode編碼,第0-127位字元使用1個位元組來表示(單個字母、數字符號等)和ascii編碼相同,其中大部分漢字採用三個位元組編碼。從128號之後開始根據字元選擇要使用的位元組位數。因此utf-8被稱為可變長編碼。
utf-16
utf-16編碼以16位無符號整數為單位,使用二或四個位元組為每個字元編碼,其中大部分漢字採用兩個位元組編碼。與utf-8相比雖然表示的方法簡單方便,有很大一部分字元用乙個位元組就可以表示的現在要用兩個位元組表示,有占有的儲存空間放大一倍,會增大網路傳輸的流量,而且沒必要這麼做。
1. 將字串通過編碼轉換為位元組碼:
str—> encode —>bytes
2. 將位元組碼通過解碼轉換為字串
bytes —>decode —>str
在python中得編碼本身為unicode編碼,所以我們在對字元進行編碼轉換時,步驟為:
a=str.encode(『gbk』)
b=a.decode(『gbk』)
3. 還有一種方式編碼解碼
編碼:
bytes
(str
,encoding=
'utf-8'
)
解碼:
str
(byte,encoding=
'utf-8'
)
[
(u'\u7528\u4f8b\u540d\u79f0'
, u'\u8fd4\u4f63\u7533\u8bf7'),
(u'\u8bf7\u6c42\u65b9\u5f0f'
, u'post'),
]
原因後來定位到是因為unicode資料在傳遞過程中使用的記憶體編碼值進行儲存,沒有使用文字形式儲存,而郵件傳送前後又沒有進行解碼
解決方法
具體使用的是python為我們提供瞭解碼和編碼的方法decode()和encode(),
其中 decode(『unicode_escape』) 能將此種字串解碼為unicode字串,使用方法如下:
>>
>
print
'\u7528\u4f8b\u540d\u79f0'
\u7528\u4f8b\u540d\u79f0
>>
>
print
'\u7528\u4f8b\u540d\u79f0'
.decode(
'unicode-escape'
)用例名稱
#text.encode("utf-8").decode('unicode-escape')
#對從瀏覽器上抓取的中文字元,轉換時,需要先encode再進行decode
encode(encoding=「utf-8」) 將unicode碼定義為utf-8格式的編碼
decode(encoding=「utf-8」) 將utf-8格式的編碼定義為unicode編碼
從英文意思上看,encode和decode分別指編碼和解碼。在python中,unicode型別是作為編碼的基礎型別,即:
decode encode
str---
----
-->
str(unicode)--
----
---> str12
>>
> u =
'中文'
# 指定字串型別物件u
>>
> str1 = u.encode(
'gb2312'
)# 以gb2312編碼對u進行編碼,獲得bytes型別物件
>>
>
print
(str1)
b'\xd6\xd0\xce\xc4'
>>
> str2 = u.encode(
'gbk'
)# 以gbk編碼對u進行編碼,獲得bytes型別物件
>>
>
print
(str2)
b'\xd6\xd0\xce\xc4'
>>
> str3 = u.encode(
'utf-8'
)# 以utf-8編碼對u進行編碼,獲得bytes型別物件
>>
>
print
(str3)
b'\xe4\xb8\xad\xe6\x96\x87'
>>
> u1 = str1.decode(
'gb2312'
)# 以gb2312編碼對字串str進行解碼,獲得字串型別物件
>>
>
print
('u1'
)'中文'
>>
> u2 = str1.decode(
'utf-8'
)# 報錯,因為str1是gb2312編碼的
unicodedecodeerror:
'utf-8' codec can't decode byte 0xd6
in position 0
: invalid continuation byte
原文:
位元組,位元的單位
b bit 位/位元
b byte 位元組
1 byte = 8 bit
我們平時的大小,一定要看清楚單位是b位元組還是b位元,兩者相差8倍
1m=1024k
1g=1024m
1t=1024g
十進位制 -----> 其他進製
hex(num) —> 十六進製制
oct(num) —> 八進位制
bin(num) —> 二進位制
字串 —> 十進位制整數
int(『10』) 十進位制字串----->十進位制整數
int(『10』,16) 十六進製制字串------>十進位制整數
int(『0x10』,16)
int(『10』,8)
int(『10』,2)
常用編碼格式
rust實現 目錄const base64 std u8 64 b a b b b c b d b e b f b g b h b i b j b k b l b m b n b o b p b q b r b s b t b u b v b w b x b y b z b a b b b c b ...
mysql檢視編碼格式以及修改編碼格式
1.進入mysql,輸入show variables like character 檢視當前字符集編碼情況,顯示如下 其中,character set client為客戶端編碼方式 character set connection為建立連線使用的編碼 character set database資料...
csv編碼格式,儲存換行問題
之前遇到csv檔案編碼預設為ansi,程式讀取資料成功,後續呼叫其他平台api時,無法找到匹配字元,導致 bug,除錯了好長一段時間 在用excel檢視檔案時,發現有跳行 import csv list abc,def,gh 我是,一張,弓 中華,有神,功 with open rent3.csv w...