Python編碼透析

2021-08-11 21:09:09 字數 3145 閱讀 3432

1.3 常見小問題

1.4 常用問題解決技巧

轉碼指令碼

1.6 相關編碼詳解

字串在python內部的表示是unicode編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。

因此,轉碼的時候一定要先搞明白,字串str是什麼編碼,然後decode成unicode,然後再encode成其他編碼

**中字串的預設編碼與**檔案本身的編碼一致。

如:s=『中文』

如果是在utf8的檔案中,該字串就是utf8編碼,如果是在gb2312的檔案中,則其編碼為gb2312。這種情況下,要進行編碼轉換,都需要先用decode方法將其轉換成unicode編碼,再使用encode方法將其轉換成其他編碼。通常,在沒有指定特定的編碼方式時,都是使用的系統預設編碼建立的**檔案。

如果字串是這樣定義:s=u』中文』

則該字串的編碼就被指定為unicode了,即python的內部編碼,而與**檔案本身的編碼無關。因此,對於這種情況做編碼轉換,只需要直接使用encode方法將其轉換成指定編碼即可。

如果乙個字串已經是unicode了,再進行解碼則將出錯,因此通常要對其編碼方式是否為unicode進行判斷:

from numpy import unicode

s = "中國"

print( isinstance(s, (str, unicode)) )#用來判斷是否為unicode

用非unicode編碼形式的str來encode會報錯

鏈結2如何獲得系統的預設編碼?

#!/usr/bin/env python

#coding=utf-8

import sys

print sys.getdefaultencoding()

該段程式在英文windowsxp上輸出為:ascii

#!/usr/bin/env python   ##這兩行必須都新增上

#coding=utf-8 ##這兩行必須都新增上

s="中文"

if isinstance(s, unicode):

#s=u"中文"

print s.encode('gb2312')

else:

#s="中文"

print s.decode('utf-8').encode('gb2312')

有的時候雖然同樣是unicode的編碼,但是依然會出現亂碼的情況,具體原理我也不是特別懂(望指教),但是通過s.decode('utf-8').encode('gb2312')確實能夠解決,方法其實我也不知道當時我怎麼yy出來的。。。

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

問題:

traceback (most recent call last):

file "amazon_test.py", line 30, in

print(s)

unicodeencodeerror: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)

解決方案:

import sys

import io

buffer

, encoding=

'utf-8'

)

我們一般比較常用utf-8的編碼格式,本指令碼可以應對多數編碼轉為utf-8

import sys

if __name__==

"__main__"

:for line in sys.stdin:

try:

print line.strip(

).decode(

"gb2312"

).encode(

"utf-8"

)except exception as e:

try:

print line.strip(

).decode(

"gbk"

).encode(

"utf-8"

)except

:try

:print line.strip(

).decode(

"utf-8"

).encode(

"utf-8"

)except

:try

:print line.strip(

).decode(

"gb18030"

).encode(

"utf-8"

)except

:try

:print line.strip(

).decode(

"ucs-bom"

).encode(

"utf-8"

)except

:try

:print line.strip(

).decode(

"cp936"

).encode(

"utf-8"

)except

:continue

# coding:utf-8

作用是定義源**的編碼. 如果沒有定義, 此原始碼中是不可以包含中文字串的.

python中預設的編碼格式是 ascii 格式,在沒修改編碼格式時無法正確列印漢字,所以在讀取中文時會報錯。

解決方法為只要在檔案開頭加入# -*- coding: utf-8 -*-或者#coding=utf-8就行了

pep 0263 – defining python source code encodings

sys.getdefaultencoding()

是設定預設的string的編碼格式

Python set例項透析

set是無序unique值的集合,常用來去重,檢驗membership等。set類似乙個詞典,但只有鍵key,沒有值value,好多操作也類似,但不支援索引,切片等操作。a set 1,2,3,1 b set 2,3,4 aprint bset 2,3,4 alen a 32 in atrue遍歷 ...

python 位元組編碼 python編碼

參考文章 python編碼 encode 將unicode字元按照編碼規則 如utf 8 編成位元組序列。a u 測試 a.encode utf 8 xe6 xb5 x8b xe8 xaf x95 python解碼 decode 將位元組序列按照編碼規則 如utf 8 解釋成unicode。a b ...

iOS單利模式透析

單例模式的意思就是只有乙個例項。單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。1.單例模式的要點 顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。2.單例模式的優點 1.例項控制 si...