基礎資料型別轉換 編碼

2021-10-03 22:15:02 字數 4160 閱讀 5446

2.編碼

資料型別有:int bool str list tuple dict set

# int ---> bool

i = 100

print(bool(i)) # true # 非零即true

i1 = 0

print(bool(i1)) # false 零即false

# bool ---> int

t = true

print(int(t)) # 1 true --> 1

t = false

print(int(t)) # 0 false --> 0

# int ---> str

i1 = 100

print(str(i1)) # '100'

# str ---> int # 全部由數字組成的字串才可以轉化成數字

s1 = '90'

print(int(s1)) # 90

# str ---> bool

s1 = '太白'

s2 = ''

print(bool(s1)) # true 非空即true

print(bool(s2)) # false

# bool ---> str

t1 = true

print(str(true)) # 'true'

# str ---> list

s1 = 'alex 太白 武大'

print(s1.split()) # ['alex', '太白', '武大']

# list ---> str # 前提 list 裡面所有的元素必須是字串型別才可以

l1 = ['alex', '太白', '武大']

print(' '.join(l1)) # 'alex 太白 武大'

print("#".join(l1) # "alex#太白#武大"

# list ---> set

s1 = [1, 2, 3]

print(set(s1)) #亂序的元組

# set ---> list

set1 =

print(list(set1)) # [1, 2, 3]

# str ---> bytes

s1 = '太白'

print(s1.encode('utf-8')) # b'\xe5\xa4\xaa\xe7\x99\xbd'

# bytes ---> str

b = b'\xe5\xa4\xaa\xe7\x99\xbd'

print(b.decode('utf-8')) # '太白'

所有資料都可以轉化成bool值

『』,0,(),{},set(),none 的bool值都為false

按儲存空間的占用分(從低到高)

數字字串

集合:無序,即無序存索引相關資訊

元組:有序,需要存索引相關資訊,不可變

列表:有序,需要存索引相關資訊,可變,需要處理資料的增刪改

字典:有序,需要存key與value對映的相關資訊,可變,需要處理資料的增刪改

按存值個數區分

標量/原子型別:數字,字串

容器型別:列表,元組,字典

按可變不可變區分

可變:列表,字典

不可變:數字,字串,元組,布林值

按訪問順序區分

直接訪問:數字

順序訪問(序列型別):字串,列表,元組

key值訪問(對映型別):字典

ascll碼:包含英文本母,數字,特殊字元與01010101對應關係

a 01000001 乙個字元乙個位元組表示

gbk:只包含本國文字(以及英文本母,數字,特殊字元)與0101010對應關係

a 01000001 ascii碼中的字元:乙個字元乙個位元組表示。

中 01001001 01000010 中文:乙個字元兩個位元組表示。

unicode:包含全世界所有的文字與二進位制0101001的對應關係。

a 01000001 01000010 01000011 00000001

b 01000001 01000010 01100011 00000001

中 01001001 01000010 01100011 00000001

utf-8:包含全世界所有的文字與二進位制0101001的對應關係(最少用8位乙個位元組表示乙個字元)。

a 01000001 ascii碼中的字元:乙個字元乙個位元組表示。

to 01000001 01000010 (歐洲文字:葡萄牙,西班牙等)乙個字元兩個位元組表示。

中 01001001 01000010 01100011 亞洲文字;乙個字元三個位元組表示。

1.在計算機記憶體中,統一使用unicode編碼,當需要將資料儲存到硬碟或者需要網路傳輸的時候,就轉換為非unicode編碼比如:utf-8編碼

舉個例子:用檔案編輯器(word,wps,等)編輯檔案的時候,從檔案將你的資料(此時你的資料是非unicode(可能是utf-8,也可能是gbk,這個編碼取決於你的編輯器設定))字元被轉換為unicode字元讀到記憶體裡,進行相應的編輯,編輯完成後,儲存的時候再把unicode轉換為非unicode(utf-8,gbk 等)儲存到檔案。

圖例:

2.不同編碼之間,不能直接互相識別

比如你的乙個資料:『老鐵沒毛病』是以utf-8的編碼方式編碼並傳送給乙個朋友,那麼你傳送的肯定是通過utf-8的編碼轉化成的二進位制01010101,那麼你的朋友接收到你發的這個資料,他如果想檢視這個資料必須將01010101轉化成漢字,才可以檢視,那麼此時那也必須通過utf-8編碼反轉回去,如果要是通過gbk編碼反轉,那麼這個內容可能會出現亂碼或者報錯。

前提條件:python3x

主要用途:資料的訪問或者檔案的傳輸

在計算機記憶體中,統一使用unicode編碼,當需要將資料儲存到硬碟或者需要網路傳輸的時候,就轉換為非unicode編碼比如:utf-8編碼

解釋圖例:

這個bytes型別與字串型別,幾乎一模一樣,可以看看bytes型別的原始碼,bytes型別可以用的操作方法與str相差無幾

str與bytes型別的區別於聯絡:

# encode稱作編碼:將 str 轉化成 bytes型別

s1 = '中國'

b1 = s1.encode('utf-8') # 轉化成utf-8的bytes型別

print(s1) # 中國

print(b1) # b'\xe4\xb8\xad\xe5\x9b\xbd'

s1 = '中國'

b1 = s1.encode('gbk') # 轉化成gbk的bytes型別

print(s1) # 中國

print(b1) # b'\xd6\xd0\xb9\xfa'

2.1.2bytes>>>str
# decode稱作解碼, 將 bytes 轉化成 str型別

b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'

s1 = b1.decode('utf-8')

print(s1) # 中國

2.1.3 gbk>>>utf-8

因為不同編碼之間不能直接互相識別(間接好了)

s1 = "中國"

b1 = s1.encode("gbk")

s1 = b1.decode("utf-8")

# s1 = s1.encode("gbk").decode("utf-8")

mysql資料庫轉換編碼

在遷移資料庫的時候,以前的資料庫用的是latin1 也不知道當初建資料庫的人怎麼想的 出現的亂碼,因為我建所有的庫用的都是utf8編碼,所以我對匯出的資料庫進行了轉碼。我只用了兩步就成功對以前的資料庫進行了轉碼 1 將表中的latin1全部更成utf8,如 engine myisam default...

關於轉換編碼問題

今天在對接的時候遇到的問題,對方curl呼叫我的介面,給我傳送的資料中包含乙個中文字串,由於他那邊是gbk編碼,我這裡是utf 8,所以介面得到的post資料一直為空。在確定是因為編碼問題之後,也採取了iconv和加header的方法,但是不知為何都沒有生效,post資料仍然為空。最後解決了問題,是...

mysql 轉換編碼方式

vim etc my.cnf 在 mysqld 標籤下加上三行 default character set utf8 character set server utf8 在 mysql 標籤下加上一行 default character set utf8 在 mysql.server 標籤下加上一行...