㈠ python 編碼轉換與中文處理
python 中的 unicode 是讓人很困惑、比較難以理解的問題. 這篇文章 寫的比較好, utf-8是 unicode的一種實現方式,unicode、gbk、gb2312是編碼字元集.
Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼范圍內的字元的時候就要使用" 編碼指示 "來修正一個 mole 的定義中,如果.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 <mole>
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 <mole>
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")
㈡ python 編碼轉換
A. Usage decode/encode:
def utf2gbk(s):
''' 按utf-8解碼,再按gbk編碼 '''
return s.decode('utf-8').encode('gbk')
with open(fname) as handle:
for ln in handle:
print utf2gbk(ln)
B. Usage codecs:
import codecs
env_coding='gbk' # 設置一個系統環境編碼
with codecs.open(fname, 'r', 'utf-8') as handle:
for ln in handle:
# print ln # 此時的ln是unicode
print ln.encode(env_coding) # 按設定系統環境編碼輸出
㈢ python字元編碼轉換
decode的作用是將其他編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串轉換成unicode編碼。
encode的作用是將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unicode編碼的字元串轉換成gb2312編碼。
㈣ Python 怎麼做強制類型轉換
a=5
printstr(a)
㈤ python將八個0的字元串強制轉成整型返回什麼
python中強制將字元串轉換為數字的方法:
1、python中可以使用int()函數將字元串轉換為整型數字,int() 函數用於將一個字元串或數字轉換為整型。
int() 方法的語法:class int(x, base=10)
參數
x -- 字元串或數字。
base -- 進制數,默認十進制。
返回值:返回整型數據。
示例:>>> s1 = '999'
>>> if s1.isdigit():
num1 = int(s1)
>>> type(num1)
>>> num1
999
2、使用float()函數將字元串轉換為浮點數
float() 函數用於將整數和字元串轉換成浮點數。
float()方法語法:class float([x])
參數
x -- 整數或字元串
返回值:返回浮點數。
示例:>>> s2 = '999.888'
>>> if s2.isdigit():
num2 = float(s2)
>>> type(num2)
Traceback (most recent call last):
File "", line 1, in
type(num2)
NameError: name 'num2' is not defined
>>>
>>> s2.isdigit()
False
>>> s2 = '999.888'
>>> num2 = float(s2)
>>> type(num2)
>>> num2
999.888
>>>
㈥ Python3強制類型轉換問題,謝謝大佬解答
提示說的很清楚了,轉換成int必須是字元串,但你的是列表。你的plist中的元素是列表當然不能轉換成int類型,看你的第四行。
㈦ python 字元串格式的unicode編碼轉中文
python對於Unicode編碼可以使用decode進行轉換成中文:
>>> str = b'\xe8\xb4\xb9\xe8\x84\x91\xe5\xad\x90'
>>> str.decode('utf-8')
'費腦子'
如果是字元串類型的Unicode編碼沒辦法直接用decode進行轉換:
>>> str ="\\xe8\\xb4\\xb9\\xe8\\x84\\x91\\xe5\\xad\\x90"
>>> str.decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
AttributeError: 'str' object has no attribute 'decode'
處理方式:
>>> str = eval("b" + "\"" + str + "\"")
>>> str.decode('utf-8')
'費腦子'
㈧ python編碼轉換:ascii和GB2312的問題
供參考。gb312本來就是標准ascii的一種擴充,ascii可以視同為gb312的子集。所以,如果var的值全部是在ascii裡面的話,轉成gb312後也還是屬於ascii,所以使用detect函數的時候,編碼還是ascii(當然同時也屬於gb312);如果var的值不是全部在ascii裡面的話,語句var = var.decode('ascii')可能會出錯。
只要var的值是英文(內碼0-127),轉換不轉換,都已經是gb2312編碼。
㈨ python怎麼轉換unicode編碼
用decode()就行。decode()方法必須傳入一個參數,這個參數就是當前待轉碼的編碼,此函數方法的用意就是將當前編碼為Unicode編碼。
比如就你這提問的此頁面:
#使用版本是python2.
importurllib
url='https://..com/question/1499967322379602619.html?entry=qb_ihome_tag&hideOtherAnswer=true&newAnswer=1'
html=urllib.urlopen(url).read()
result=html.decode('gbk')
printresult
方法是絕對可行的
此法對字元串和文檔內容的解碼一樣有效。