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...