關於python編碼時的信息

本文目錄一覽:

python有哪幾種編碼方式

第一種:ASCII碼。是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,它是現今最通用的單字節編碼系統,並等同於國際標準IS/IEC

646。

由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機李,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母a的編碼是97,後128個稱為擴展ASCII碼。

第二種:GBK和GB2312。能在計算機中顯示中文字符是至關重要的,然而ASCII表裡一個偏旁部首都沒有,所以我們需要一個關於中文和數字對應的關係表,一個字節只能最多表示256個字符,用處理中文顯然一個字節是不夠的,所以我們需要採用兩個字節來表示,所以中國制定了GB2312編碼,用來將中文編寫進去。

第三種:Unicode。因為各個國家都有一套自己的編碼,所以無法避免衝突,因此Unicode誕生了。它可以把所有語言都統一到一套編碼里,這樣就不會存在亂碼問題了,現代操作系統和大多數編程語言都直接支持Unicode。

第四種:UFT-8。基於節約的原則,出現了把Unicode編碼轉化為可變長編碼的UTF-8編碼。而UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成一個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節,如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。

怎麼在Python里使用UTF-8編碼

概述

在python代碼即.py文件的頭部聲明即可

解析

py文件中的編碼

Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼範圍內的字符的時候就要使用”編碼指示”來修正一個 module 的定義中,如果.py文件中包含中文字符(嚴格的說是含有非anscii字符),則需要在第一行或第二行指定編碼聲明:

# -*- coding=utf-8 -*-

#coding=utf-8

# 以上兩種選其一即可

其他的編碼如:gbk、gb2312也可以;否則會出現:

SyntaxError: Non-ASCII character ‘\xe4’ in file test.py on line 3, but no encoding declared; see for details

python中的編碼與解碼

先說一下python中的字符串類型,在python中有兩種字符串類型,分別是 str 和 unicode,他們都是basestring的派生類;

str類型是一個包含Characters represent (at least) 8-bit bytes的序列;

unicode 的每個 unit 是一個 unicode obj;

在str的文檔中有這樣的一句話:

The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file.

也就是說在讀取一個文件的內容,或者從網絡上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。

拓展內容

utf-8編碼

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,也是一種前綴碼。它可以用來表示Unicode標準中的任何字符,且其編碼中的第一個字節仍與ASCII兼容,這使得原來處理ASCII字符的軟件無須或只須做少部分修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或發送文字的應用中,優先採用的編碼。

UTF-8使用一至六個字節為每個字符編碼(儘管如此,2003年11月UTF-8被RFC 3629重新規範,只能使用原來Unicode定義的區域,U+0000到U+10FFFF,也就是說最多四個字節):

1、128個US-ASCII字符只需一個字節編碼(Unicode範圍由U+0000至U+007F)。

2、帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要兩個字節編碼(Unicode範圍由U+0080至U+07FF)。

3、其他基本多文種平面(BMP)中的字符(這包含了大部分常用字,如大部分的漢字)使用三個字節編碼(Unicode範圍由U+0800至U+FFFF)。

4、其他極少使用的Unicode 輔助平面的字符使用四至六字節編碼(Unicode範圍由U+10000至U+1FFFFF使用四字節,Unicode範圍由U+200000至U+3FFFFFF使用五字節,Unicode範圍由U+4000000至U+7FFFFFFF使用六字節)。

對上述提及的第四種字符而言,UTF-8使用四至六個字節來編碼似乎太耗費資源了。但UTF-8對所有常用的字符都可以用三個字節表示,而且它的另一種選擇,UTF-16編碼,對前述的第四種字符同樣需要四個字節來編碼,所以要決定UTF-8或UTF-16哪種編碼比較有效率,還要視所使用的字符的分布範圍而定。不過,如果使用一些傳統的壓縮系統,比如DEFLATE,則這些不同編碼系統間的的差異就變得微不足道了。若顧及傳統壓縮算法在壓縮較短文字上的效果不大,可以考慮使用Unicode標準壓縮格式(SCSU)。

互聯網工程工作小組(IETF)要求所有互聯網協議都必須支持UTF-8編碼。互聯網郵件聯盟(IMC)建議所有電子郵件軟件都支持UTF-8編碼。

Python編碼時應該注意的幾個情況

# 交換兩個變量

a, b = b, a

# 切片(slice)操作符中的step參數。(切片操作符在python中的原型是[start:stop:step],即:[開始索引:結束索引:步長值])

a = [1,2,3,4,5]

a[::2] # 遍歷列表中增量為2的數據

[1,3,5]

# 特殊情況下,`x[::-1]`是實現x逆序的實用的方式

a[::-1]

[5,4,3,2,1]

# 逆序並切片

x[::-1]

[5, 4, 3, 2, 1]

x[::-2]

[5, 3, 1]

python是什麼編碼格式

python編碼總結:

1).首先python有兩種格式的字符串,str和unicode,其中unicode相當於字節碼那樣,可以跨平台使用。

str轉化為unicode可以通過unicode(),u,str.decode三種方式

unicode轉化為str,如果有中文的話,一般通過encode的方式

2).如果代碼中有中文的話,我們一般會添加 “# coding=utf-8″,這個是什麼作用呢,一般如下:

如果代碼中有中文注釋,就需要此聲明比較高級的編輯器(比如我的emacs),會根據頭部聲明,將此作為代碼文件的格式。程序會通過

頭部聲明,解碼初始化 u”人生苦短”,這樣的unicode對象,(所以頭部聲明和代碼的存儲格式要一致

所以,當我們填上編碼頭的時候,使用s=”中文”,實際上type(s)是一個str,是已經將unicode以utf-8格式編碼成str。

其次,如果我們在代碼中使用s=u’中文’,相當於將str以utf-8解碼成unicode。

推薦學習《python教程》。

Python 源程序編碼注意事項?

默認情況下,Python 源文件是 UTF-8 編碼。在此編碼下,全世界大多數語言的字符可以同時用在字符串、標識符和注釋中 — 儘管 Python 標準庫僅使用 ASCII 字符作為標識符,這只是任何可移植代碼應該遵守的約定。如果要正確的顯示所有的字符,你的編輯器必須能識別出文件是 UTF-8 編碼,並且它使用的字體能支持文件中所有的字符。

你也可以為源文件制定不同的字符編碼。為此,在 #! 行(首行)後插入至少一行特殊的注釋行來定義源文件的編碼:

# -*- coding: encoding -*-

通過此聲明,源文件中所有的東西都會被當作用 encoding 指代的 UTF-8 編碼對待。在 Python 庫參考手冊 codecs 一節中你可以找到一張可用的編碼列表。

例如,如果你的編輯器不支持 UTF-8 編碼的文件,但支持像 Windows-1252 的其他一些編碼,你可以定義:

# -*- coding: cp-1252 -*-

這樣就可以在源文件中使用 Windows-1252 字符集中的所有字符了。這個特殊的編碼注釋必須在文件中的 第一或第二 行定義。

Python 編碼轉換與中文處理

python 中的 unicode 是讓人很困惑、比較難以理解的問題. 這篇文章 寫的比較好, utf-8是 unicode的一種實現方式,unicode、gbk、gb2312是編碼字符集.

Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼範圍內的字符的時候就要使用” 編碼指示 “來修正一個 module 的定義中,如果.py文件中包含中文字符(嚴格的說是含有非anscii字符),則需要在第一行或第二行指定編碼聲明: # -*- coding=utf-8 -*- 或者 #coding=utf-8

其他的編碼如:gbk、gb2312也可以;否則會出現:

先說一下python中的字符串類型,在python中有兩種字符串類型,分別是 str 和 unicode ,他們都是basestring的派生類;

在str的文檔中有這樣的一句話:

也就是說在讀取一個文件的內容,或者從網絡上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。

unicode 轉為 gb2312,utf-8等,使用 encode(encoding)

utf-8,GBK轉換為 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)

普通的 str 轉為 unicode,

如果直接執行s.encode(‘gb2312’)會發生什麼?

這裡會發生一個異常:Python 會自動的先將 s 解碼為 unicode ,然後再編碼成 gb2312。因為解碼是python自動進行的,我們沒有指明解碼方式,python 就會使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 s 不是這個類型就會出錯。

拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯了:

對於這種情況,我們有兩種方法來改正錯誤:

s = ‘中文’

s.decode(‘utf-8’).encode(‘gb2312’) “`

import sys

reload(sys) # Python2.5 初始化後會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入

sys.setdefaultencoding(‘utf-8’)

str = ‘中文’

str.encode(‘gb2312’)

print open(“Test.txt”).read()

import codecs

print open(“Test.txt”).read().decode(“utf-8”)

Traceback (most recent call last):

File “ChineseTest.py”, line 3, in module

print open(“Test.txt”).read().decode(“utf-8”)

UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\ufeff’ in position 0: illegal multibyte sequence

import codecs

data = open(“Test.txt”).read()

if data[:3] == codecs.BOM_UTF8:

data = data[3:]

print data.decode(“utf-8”)

s = “中文”

print unicode(s, “utf-8”)

Traceback (most recent call last):

File “ChineseTest.py”, line 3, in module

s = unicode(s, “utf-8”)

UnicodeDecodeError: ‘utf8’ codec can’t decode bytes in position 0-1: invalid data

s = “中文”

print unicode(s, “gbk”)

s = “中文”

print unicode(s, “cp936”)

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243037.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:54
下一篇 2024-12-12 12:54

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論