Python 基礎 - 字元編碼

來源:互聯網
上載者:User

標籤:pre   nes   stand   org   class   mp3   bin   方式   1.0   

 

Python 解釋器在加載 .py 檔案中的代碼時,會對內容進行編碼 (默認 ascill)

 

ASCII

(American Standard Code for Information Interchange, 美國資訊交換標準代碼)是基於拉丁字母的一套電腦編碼系統,

主要用於顯示現代英語和部分支援其他西歐語言,其最多隻能用 8 bit來表示(一個字節),即: 2**8 = 256-1,所以ASCII碼最多隻能表示255個符號

 

 關於中文編碼

為了處理漢字,程式員設計了用於簡體中文的GB2312和用於繁體中文的big5。

 

GB2312

《資訊交換用漢字編碼字元集》是由中國國家標準總局1980年發布,1981年5月1日開始實施的一套國家標準,標準號是GB 2312—1980,又稱為GB 2312–80、GB0 。

GB2312編碼用兩個字節(8位2進制)表示一個漢字,所以理論上最多可以表示256×256=65536個漢字。

整個字元集分成94個區,每區有94個位。每個區位上只有一個字元,因此可用所在的區和位來對漢字進行編碼,稱為區位碼。
基本集共收入漢字6763個和非漢字圖形字元682個。它所收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。但對於人名、古漢語等方面出現的罕用字和繁體字,GB 2312不能處理,因此後來GBK及GB 18030漢字字元集相繼出現以解決這些問題。
GB2312編碼適用於漢字處理、漢字通訊等系統之間的資訊交換,通行於中國大陸;新加坡等地也採用此編碼。

 

GBK

漢字內碼擴展規範,全名為《漢字內碼擴展規範(GBK)》1.0版,由中華人民共和國全國資訊技術標準化技術委員會1995年12月1日制訂。
GBK的K為漢語拼音Kuo Zhan(擴展)中“擴”字的聲母。英文全稱Chinese Internal Code Extension Specification。
GBK 只為"技術規範指導性檔案",不屬於國家標準。國家質量技術監督局於2000年3月17日推出了GB 18030-2000標準,以取代GBK

 

GB 18030

全稱:「國家標準GB 18030-2005《資訊科技 中文編碼字元集》」,是中華人民共和國現時最新的變長度多位元組字元集。

對GB 2312-1980完全回溯相容,與GBK基本回溯相容;支援GB 13000(93版等同於Unicode 1.1;共收錄漢字70,244個。

現在的PC平台必須支援GB18030,對嵌入式產品暫時沒有要求,所以手機、MP3都只有支援GB2312。

GB 18030版本如下: 

  • GB 18030-2000,相容 Unicode 3.0 中日韓統一表意文字(即擴充功能A區),共收27,533個漢字;2000年3月17日發布、2000年7月1日實施。
  • GB 18030-2005,更新至 Unicode 3.1 中日韓統一表意文字(即擴充功能B區),並刊載少數民族包括朝鮮文、蒙古文(包括滿文、托忒文、錫伯文、阿禮嘎禮文)、德宏傣文、藏文、維吾爾文/哈薩克文/柯爾克茲文和彝文的文字。共有70,244個漢字;2005年11月8日發布、2006年5月1日實施

 

從ASCII、GB2312、GBK、GB18030,這些編碼方法是向下相容的。

  

Unicode(中文:萬國碼國際碼統一碼單一碼

是電腦科學領域裡的一項業界標準。它對世界上大部分的文字系統進行了整理、編碼,使得電腦可以用更為簡單的方式來呈現和處理文字。 

 

UTF-88-bit Unicode Transformation Format

是一種針對Unicode的可變長度字元編碼,也是一種字首碼。它可以用來表示Unicode標準中的任何字元,且其編碼中的第一個位元組仍與ASCII相容,這使得原來處理ASCII字元的軟體無須或只須做少部份修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他儲存或傳送文字的應用中,優先採用的編碼。

 

總結:

ASCII 255個字元 1bytes        --->  1980年 GB2312  6763個漢字        --->  1995年 GBK1.0   2萬漢字以上        --->  2000年 GB18030 27,533個漢字        --->  unicode 2bytes        --->  utf-8  en: 1byte, zh: 3 bytes

 

現在來個小實驗,用 Python2.7版的來執行,看不加入字元編碼會有什麼結果?

#!/usr/bin/env python
name = "你好,世界"
print(name)

----------------------輸出結果----------------------

SyntaxError: Non-ASCII character ‘\xe4‘ in file coding.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

 

上面錯誤訊息是說因為沒有加入字元編碼,無法解譯出中文,所以噴Error,解法其實很簡單,可以參考上面錯誤訊息裡的網址,會告訴你要加入字元編碼,寫法如下:

#!/usr/bin/python# -*- coding: utf-8 -*-

 

若是 Python3的話,會有什麼樣的結果?

#!/usr/bin/env python3name = "你好,世界"print(name)----------------------輸出結果---------------------- 你好,世界

為什麼 Python3 不用加入字元編碼?是因為預設 Python3 默認就是用 utf-8,所以執行時就會直接列印出來。

 

Python 基礎 - 字元編碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.