Python 基礎 - 字符編碼
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-8(8-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 python3 name = "你好,世界"
print(name) ----------------------輸出結果---------------------- 你好,世界
為什麼 Python3 不用加入字符編碼?是因為預設 Python3 默認就是用 utf-8,所以執行時就會直接打印出來。
Python 基礎 - 字符編碼的更多相关文章
- Python 基礎 - 字符轉編碼操作
回顧字符編碼的前世今生 ASCII 只能儲英文或特殊字符,只占一個字節,一個字節8bit,不能儲中文,所以才出現Unicode Unicode 不管是中文或英文,都是占二個字節,一個字節8bit UT ...
- Python 基礎 - 文件操作_v2
嗯,那如何要把游標的位置給打印來? #!/usr/bin/env python3 # -*- coding:utf-8 -*- f = open('test', 'r') print(f.tell() ...
- Python 基礎 - 字典的操作使用
接下來介紹字典,這在未來工作上,會是很常使用的,就來好好了解一下唄- 字典是一個 key(鍵)-value(值) 的數據類型,可以儲存很多訊息 #!/usr/bin/env python3 # -*- ...
- Python 基礎 - for流程判斷
今天介紹另一個循環判斷式 for循環,首先,先寫一個很簡單的 for循環的代碼 #!/usr/bin/env python3 # -*- coding:utf-8 -*- for i in range ...
- Python 基礎 - if else流程判斷
hmm~前面講了那麼多,終於可以稍稍的正式進入另一個階段,沒錯,要開始寫判斷式了 這次先從最簡單的判斷式開始,if else 開始- Go 首先,之前有寫有一個簡單的互動式 用戶輸入 的代碼,忘記了嗎 ...
- python基礎學習第一天
python歷史 Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python 由 Guido van Rossum 于 1989 年底在荷兰国家数学和计算机科学研究所设计出来 ...
- Python 基礎 - bytes數據類型
三元運算 什麼是三元運算?請看下圖說明 透過上圖說明後,可以得出一個三元運算公式: result = 值1 if 條件 else 值2, 如果鯈件為真: result = 值1 如果鯈件為假: res ...
- python基礎學習第二天
字符编码 # 需知:## 1.在python2默认编码是ASCII, python3里默认是unicode## 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf ...
- Python 基礎 - pyc 是什麼
Python2.7 版中,只要執行 .py 的檔案後,即會馬上產生一個 .pyc 的檔案,而在 Python3 版中,執行 .py 的檔案後,即會產生一個叫 __pycache__ 的目錄,裡面也會有 ...
随机推荐
- C语言:内存字节对齐详解[转载]
一.什么是对齐,以及为什么要对齐: 1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问, ...
- 【leetcode❤python】 28. Implement strStr()
#-*- coding: UTF-8 -*- #题意:大海捞刀,在长字符串中找出短字符串#AC源码:滑动窗口双指针的方法class Solution(object): def strStr(se ...
- Android 四大组件之一(Activity)
Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()——>onStart()——>onResume() 当另一个Activity启 ...
- UIDatePicker的用法
目录[-] 1.Locale 2.Calendar 3.timeZone 4.date 5.minimumDate 6.maximumDate 7.countDownDuration 8.minute ...
- 使用spawn-fcgi管理php-cgi
spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u nginx -g nginx -f php-cgi
- Using Spring Boot without the parent POM
Using Spring Boot without the parent POM: 问题 spring boot项目一般情况下的parent如下: <parent> <groupId ...
- JavaScript基础(慕课)
1. JavaScript函数: function 函数名() { 函数代码;//完成特定功能的代码. }PS:函数定义好后,是不能自动执行的,所以需调用它,只需直接在需要的位置写函数就ok了 2. ...
- 注册Github
注册Github 1.打开Github网页 2.设置用户名.邮箱.密码(右侧会显示是否可以使用),点击注册 3.此时邮箱会发来来自Github的注册消息,进入邮箱,点连接,完成注册 4.注册成功
- mysql 数据导出 常用总结
mysqldump -t 数据库名 -uroot -p > xxx.sql 总结:上面的导出形式默认表结构和数据: -d表结构; -t数据; -c, --complete-insert使用完 ...
- session没有过期,其保存的数据无故丢失的原因
问题: 我们经常会做到的一个功能,将登录用户信息保存到session中,在页面上显示登录用户名.但是,如果很短时间内甚至几秒没有刷新这个页面的话,这个用户名就消失了,其实就是session中保存的用户 ...