1. 程式人生 > >5.1 字符串

5.1 字符串

translate 移動 操作 類型 不同的應用 不能 表示 AC log

  最早的字符串編碼是美國標準信息交換碼 ASCII,進對10個數字,26個大寫英文字母、26個小寫英文字母及一些其他符號進行了編碼。ASCII采用1個字節來對字符進行編碼,最多只能表示256個符號。

  隨著信息技術的發展和信息交換的需要,各國的文字都需要進行編碼,不同的應用領域和場合對字符串編碼的要求也略有不同,於是分別設計了不同的編碼格式,常見的主要有UTF-8、UTF-16、UTF-32、GB2312、GBK、CP936、base64、CP437等。UTF-8編碼是國際通用的編碼,以1個字節表示英語字符(兼容ASCII),以3個字節表示中文,還有些語言的符號用2個字節(如俄語和希臘語符號)或4個字節,UTF-8對全世界所有國家需要用到的字符進行了編碼。

  不同編碼格式之間相差很大,采用不同的編碼格式意味著不同的表示和存儲形式,把同一字符存入文件時,寫入的內容可能會不同,在理解其內容時必須了解編碼規則並進行正確的解碼。如果解碼方法不正確就無法還原信息,從這個角度來講,字符串編碼也具有加密的效果。

  Python 3.x 完全支持中文,使用Unicode編碼格式,無論是一個數字、英文字母,還是一個漢字,都按一個字符對待和處理。

1 >>> s = 中國
2 >>> len(s)
3 2
4 >>> 姓名 = 張三
5 >>> print(姓名)
6 張三
7 >>>

  小提示:在Python程序、腳本中可以用如下方式指定編碼

    #coding=utf-8

    #coding:urf-8

    #- * -coding:utf-8 - * -

  在Python中,字符串屬於不可變序列類型,使用單引號、雙引號、三引號或三雙引號作為界定符,並且不同的界定符之間可以互相嵌套。下面幾種都是合法的Python字符串:

1 abc
2 123
3 中國
4 "Python"
5 ‘‘‘Tom said,"Let‘s go"‘‘‘

  除了支持序列通用方法(包括雙向索引、比較大小、計算長度、元素訪問、切片等操作)以外,字符串類型還支持一些特有的操作方法,如格式化、字符串查找、字符串替換(註意,不是原地替換)、排版等。但由於字符串屬於不可變序列,不能直接對字符串對象進行元素增加、修改與刪除等操作。另外,字符串對象提供的replace()和translate()方法也不是對原字符串直接進行修改和替換,而是返回一個修改替換後的新字符串作為結果。

  Python支持短字符串駐留機制,對於短字符串,將其賦值給多個不同的對象時,內容中只有一個副本,多個對象共享該副本,與其他類型數據具有相同的特點。然而,這一點並不適用於長字符串,長字符串不遵循駐留機制。個人認為,知道這個也沒什麽用。

  如果需要判斷一個變量是否為字符串,可以使用內置方法isinstance()或type()。

 1 >>> type(中國)
 2 <class str>
 3 >>> 
 4 >>> #編碼成字節串,采用GBK編碼格式
 5 >>> type(中國.encode(gbk))
 6 <class bytes>
 7 >>> 
 8 >>> bytes
 9 <class bytes>
10 >>> 
11 >>> isinstance(中國,str)
12 True
13 >>> 
14 >>> type(中國) == str
15 True
16 >>> 

  

  拓展知識:轉義字符。是指在字符串中某些特定的附後前加一個斜線之後該字符被解釋為另外一種含義,不再表示本來的字符。常見轉義字符表如下:

轉義字符 含義
\b 退格,把光標移動到前一列位置
\f 換頁符
\n 換行符
\r 回車
\t 水平制表符
\v 垂直制表符
\\ 一個\
\‘ 單引號
\" 雙引號
\ooo 3位八進制數對應的字符
\xhh 2位十六進制數對應的字符
\uhhhh 4位十六進制數表示的Unicode字符

  下面代碼演示了轉義字符用法:

 1 >>> print(Hello\nWorld)   #包含轉義字符的字符串
 2 Hello
 3 World
 4 >>> 
 5 >>> oct(65)
 6 0o101
 7 >>> 
 8 >>> print(\101)   #3位八進制數對應的字符
 9 A
10 >>> 
11 >>> hex(65)
12 0x41
13 >>> 
14 >>> print(\x41)   #2位十六進制數對應的字符
15 A
16 >>> 
17 >>> ord()
18 33891
19 >>> 
20 >>> hex(_)
21 0x8463
22 >>> 
23 >>> print(\u8463)    #4位十六進制表示的Unicode字符
24 

5.1 字符串