pythonutf8轉gbk編碼
1. 如何修改python文件的編碼格式
可以知道的是,文本文件的默認編碼並不是utf8。
我們打開一個文本文件,並點擊另存為
2
我們在新窗口的編碼一欄看到默認編碼是ANSI。先不管這個編碼是什麼編碼,但是通過下拉列表我們知道,這種編碼不是utf8。
END
編碼測試
1
對於Python裡面的中文顯示,我們常常使用utf8和gbk的編碼。對於這兩種編碼筆者就不介紹了,總之都是專門可以處理中文的編碼方式啦。
2
我們首先對文本文件測試了gbk解碼。我們發現,此編碼下文本文件內容可以正常顯示,但是使用utf8解碼,程序出錯,拋出decodeError異常
3
同樣的,我們對Python腳本文件測試了utf8解碼。我們發現,此編碼下文本文件內容可以正常顯示,但是使用gbk解碼,中文部分出現亂碼
4
測試說明,對於文本文件需要使用gbk解碼,而對於腳本文件需要utf8解碼,也就是說,文本文件是gbk編碼的,而腳本則是utf8
2. python2.7 utf-8轉gbk 亂碼
windows的本地默認編碼是cp936(gbk編碼),Windows中直接列印utf-8的字元串是亂碼
將你文件申明為UTF-8保存
#coding:utf-8
def respeak(self):
cText =pyperclip.paste()
gt = cText.decode('utf-8').encode('gbk')
self.ui.mainT.setText(QtCore.QString(gt))
3. 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) # 按設定系統環境編碼輸出
4. python輸出到文件亂碼如何解決
python代碼文件的編碼
py文件默認是ASCII編碼,中文在顯示時會做一個ASCII到系統默認編碼的轉換,這時就會出錯:SyntaxError: Non-ASCII character。需要在代碼文件的第一行或第二行添加編碼指示:
1 # coding=utf-8 ##以utf-8編碼儲存中文字元
2 print '中文'
像上面那樣直接輸入的字元串是按照代碼文件的編碼來處理的,如果用unicode編碼,有以下三種方式:
1 s1 = u'中文' #u表示用unicode編碼方式儲存信息
2 s2 = unicode('中文','gbk')
unicode是一個內置函數,第二個參數指示源字元串的編碼格式。
decode是任何字元串具有的方法,將字元串轉換成unicode格式,參數指示源字元串的編碼格式。
encode也是任何字元串具有的方法,將字元串轉換成參數指定的格式。
(2)、字元串的編碼
用 u'漢字' 構造出來的是unicode類型,不用的話構造出來是str類型
str的編碼是與系統環境相關的,一般就是sys.getfilesystemencoding()得到的值
所以從unicode轉str,要用encode方法
從str轉unicode,所以要用decode
例如:
# coding=utf-8 #默認編碼格式為utf-8
s = u'中文' #unicode編碼的文字
print s.encode('utf-8') #轉換成utf-8格式輸出
但當python中間處理非ASCII編碼時,經常會出現如下錯誤:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
0x??是超出128的數字,python在默認的情況下認為語言的編碼是ascii編碼,所以無法處理其他編碼,需要設置python的默認編碼為所需要的編碼。
一個解決的方案是在代碼中添加:
import sys
reload(sys)
sys.setdefaultencoding('utf-8') (其中utf-8為你想輸出的字元編碼)
解釋:
sys.setdefaultencoding方法在python導入site.py後就刪除了(具體代碼查看site.py就可以看到)因此如果想用的話可以再重新load進入
總結:
u=u'unicode編碼文字'
g=u.encode('gbk') #轉換為gbk格式
print g #此時為亂碼,因為當前環境為utf-8,gbk編碼文字為亂碼
str=g.decode('gbk').encode('utf-8') #以gbk編碼格式讀取g(因為他就是gbk編碼的,需要事先知道它是GBK編碼)並轉換為utf-8格式輸出
print str #正常顯示中文(同文件輸出)
安全的方法:
s.decode('gbk','ignore').encode('utf-8′) #以gbk編碼讀取(當然是讀取gbk編碼格式的文字了)並忽略錯誤的編碼,轉換成utf-8編碼輸出。
推薦學習《Python教程》!
5. Python2.7為什麼Utf-8到GBK會變成亂碼
程序沒縮進,看著費勁!
#coding=utf-8
defrespeak():
cText=u'中文'#pyperclip.paste()
print(cText)
printrepr(cText)
print(' Afterencode:')
gbk_text=cText.encode('gbk')
print(gbk_text)
printrepr(gbk_text)
print(' Afterdecode:')
real_text=gbk_text.decode('gbk')
print(real_text)
printrepr(real_text)
if__name__=='__main__':
respeak()
[willie@localhost pys]$ python2.7 speak.py
中文
u'u4e26587'
After encode:
���
'xd6xd0xcexc4'
After decode:
中文
u'u4e26587'
6. python utf8 gbk 編碼問題
你是不是想在python里把中文變成鏈接中%E5%BE%85這種形式?直接用urllib.urlencode({'word':'中文'})方法
而顯示\xe5\xbe\x85\是因為你沒有使用read()方法,加上後變成:'待解析網頁'.decode('gbk').encode('utf-8').read(),就是你熟悉的中文了。
不過,'待解析網頁'.decode('gbk').encode('utf-8')這句我要吐槽一下,網頁明顯是utf-8編碼,你在文件開頭聲明utf-8編碼就可以了,這一句是多餘的。在這基礎上讀取網頁直接用 '待解析網頁'.read()
7. Python處理不同編碼utf8和gbk的問題
有。
使用chardet庫。它會去猜測文本文件的編碼,並返回形如:
編碼類型:utf-8
置信度:0.9
這樣的結果,也就是說chardet斷定該文件有90%的可能性是utf-8編碼的。
不過chardet的缺陷就是,它不能完全100%確定文件的編碼類型。
目前我的做法是,如果置信度超過0.95,那麼就認定chardet的判斷結果是正確的。否則,再加上一些人機交互操作進行判斷。
目前,chardet庫官網提供的版本只適用於Python 2,如果您使用的是Python 3.x,我可以另外上傳一個。
8. utf-8編碼的頁面如何轉成gbk編碼的頁面(急)
要做兩件事:
1. 內容替換:把文件里的charset=utf-8字樣改為charset=gb2312
2. 編碼轉換:把文件保存成gb2312格式的,用記事本按照utf8打開後,選擇保存時設置成ansi的編碼方式。
如果文件很多,建議用Replace Pioneer來批量完成,詳細步驟如下:
* 批量內容轉換
1) 安裝Replace Pioneer,並打開Tools->Batch Runner菜單
2) 點擊Pick Files選擇多個待處理的html文件
3) 點擊Fast Replace
點擊Add,在Search輸入charset=utf-8(具體內容對於不同的html可能不盡一致),在replace輸入charset=gb2312
4) 點擊Start完成內容替換。
* 批量編碼轉換
1) 打開Tools->Batch Runner菜單
2) 點擊Pick Files選擇多個待處理的html文件
3) 點擊Change Encode,選擇utf8作為input encoding,選擇CN->gbk作為output encoding,點擊Start即可。
注意提前備份,以防誤操作。
** 補充回答:以上批量操作的步驟是使用Replace Pioneer來完成的