python 編碼問題總結

2021-07-24 04:22:31 字數 1798 閱讀 8155

1、

簡而言之,python 2.x裡字串有兩種:str和unicode

前者到後者要decode,後者到前者要encode,'utf-8'為例:

str.decode('utf-8') -> unicode

str <- unicode.encode('utf-8')

總結:unicode就像是中間橋梁,utf-8編碼,gbk編碼都可以decode成unicode編碼,而unicode編碼可以encode成utf-8。編碼其實就分為兩類unicode編碼和非unicode編碼,非unicode包含了uft-8,gbk之類的,utf-8和gbk的轉換可以通過unicode來作為中間橋梁,先decode成unicode,再encode成相應的碼

print "type of    '中文'   is %s" % type('中文')

print "type of '中文'.decode('utf-8') is %s" % type('中文'.decode('utf-8'))

print "type of u '中文' is %s" % type(u'中文')

print "type of u'中文'.encode('utf-8') is %s" % type(u'中文'.encode('utf-8'))

說明: type of    '中文'   is

type of   '中文'.decode('utf-8')   is

type of   u '中文'   is

type of   u'中文'.encode('utf-8')   is

2、避免編碼問題建議

一、使用字元編碼宣告,並且同一工程中的所有源**檔案使用相同的字元編碼宣告

#encoding=utf-8

說明:如果py檔案的開頭已經使用了#encoding=utf-8,那麼就print 就自動將print的字元轉成utf-8,

test2 = u'漢字'

print test2

#encoding=utf-8

test2 = u'漢字'

print test2

說明:這樣就不會報錯,否則亂碼

3、讀寫檔案

從目標檔案讀入,然後decode成unicode碼,然後再encode成utf-8碼,再存到檔案中。

內建的open()方法開啟檔案時,read()讀取的是str,str可以使用gbk,utf-8,讀取後需要使用正確的編碼格式進行decode()。write()寫入時,如果引數是unicode,則需要使用你希望寫入的編碼進行encode(),如果是其他編碼格式的str,則需要先用該str的編碼進行decode(),轉成unicode後再使用寫入的編碼進行encode()。如果直接將unicode作為引數傳入write()方法,python將先使用源**檔案宣告的字元編碼進行編碼然後寫入。

# coding: utf-8

f = open('test.txt')

s = f.read()

f.close()

print type(s) # # 已知是gbk編碼,解碼成unicode

u = s.decode('gbk')

f = open('test.txt', 'w')

# 編碼成utf-8編碼的str

s = u.encode('utf-8')

f.write(s)

f.close()

python 編碼問題總結

python 編碼問題總結 2010 05 12 15 07 問題一 當python中間處理非ascii編碼時,經常會出現如下錯誤 unicodedecodeerror ascii codec can t decode byte 0x?in position 1 ordinal not in ran...

python編碼問題總結

1 python內部預設是使用unicode儲存內容的 2 python解析器讀取原始檔,預設是使用ascii編碼的,如果檔案中存在中文,則會報錯,形如 syntaxerror non ascii character xe5 in file f workspace test.py 此時可以在原始檔開...

python編碼問題總結

最近利用python抓取一些網上的資料,遇到了編碼的問題。非常頭痛,總結一下用到的解決方案。import chardet f open file r fencoding chardet.detect f.read print fencoding fencoding輸出格式 只能判斷是否為某種編碼的概...