Python中Unicode字串

來源:互聯網
上載者:User

標籤:導致   div   告訴   byte   gpo   decode   統一   lin   blog   

字串還有一個編碼問題。

因為電腦只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的電腦在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位11111111=十進位255),0 - 255被用來表示大小寫英文字母、數字和一些符號,這個編碼錶被稱為ASCII編碼,比如大寫字母 A 的編碼是65,小寫字母 z 的編碼是122。

如果要表示中文,顯然一個位元組是不夠的,至少需要兩個位元組,而且還不能和ASCII編碼衝突,所以,中國制定了GB2312編碼,用來把中文編進去。

類似的,日文和韓文等其他語言也有這個問題。為了統一所有文字的編碼,Unicode應運而生。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。

Unicode通常用兩個位元組表示一個字元,原有的英文編碼從單位元組變成雙位元組,只需要把高位元組全部填為0就可以。

因為Python的誕生比Unicode標準發布的時間還要早,所以最早的Python只支援ASCII編碼,普通的字串‘ABC‘在Python內部都是ASCII編碼的。

Python在後來添加了對Unicode的支援,以Unicode表示的字串用u‘...‘表示,比如:

print u‘中文‘
中文

注意: 不加 u ,中文就不能正常顯示。

Unicode字串除了多了一個 u 之外,與一般字元串沒啥區別,逸出字元和多行標記法仍然有效:

轉義:

u‘中文\n日文\n韓文‘

多行:

u‘‘‘第一行
第二行‘‘‘

raw+多行:

ur‘‘‘Python的Unicode字串支援"中文",
"日文",
"韓文"等多種語言‘‘‘

如果中文字串在Python環境下遇到 UnicodeDecodeError,這是因為.py檔案儲存的格式有問題。可以在第一行添加註釋

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

目的是告訴Python解譯器,用UTF-8編碼讀取原始碼。然後用Notepad++ 另存新檔... 並選擇UTF-8格式儲存。

任務

用多行Unicode字串表示下面的唐詩並列印:

靜夜思

床前明月光,

疑是地上霜。

舉頭望明月,

低頭思故鄉。

 

 

參考代碼:

print u‘‘‘靜夜思
床前明月光,
疑是地上霜。
舉頭望明月,
低頭思故鄉。‘‘‘

或:

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

 

print ‘‘‘靜夜思

床前明月光,

疑是地上霜。

舉頭望明月,

低頭思故鄉。‘‘‘

 

 

解釋:代碼編輯第一行的注釋#-*-coding:utf-8 -*-,表明以下Python代碼使用utf-8編碼,但是很多人把題目要求的輸出語句寫成print u‘" ..."‘,這樣就又要讓解譯器使用Unicode編碼輸出,導致解碼出錯。我們應該記住以何種方式編碼就應以何種方式解碼,否則就很有可能出現編碼錯誤。

Python中Unicode字串

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.