Ⅰ python3.6 cx_oracle連接資料庫報編碼錯UnicodeDecodeError
我說下我遇到的情況
資料庫字元集是 ZHS16GBK
錯誤的情況是
UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xa7inposition12:illegalmultibytesequence
經過檢查,在fetchall()獲取記錄時,查詢到的記錄裡面有亂碼(應該是不包含在資料庫現有字元集下的字元)
臨時的一個解決辦法是
db=cx_Oracle.connect(dblink,encoding='UTF-8')
這樣可以讀取了,讀取到的內容為
廣州市ue738同泰路
其中 'ue738'應該是之前不可被讀取的字元,希望對各位有幫助
Ⅱ python的編碼問題,一個小例子讓人很困惑
其實,字典中返改的uxxxx或者芹世此x..之類 就是utf-8編碼,經過解碼就嫌迅是漢字了
print 列印的字元是自動解碼的。(根據第一行的 coding:utf-8)
print 列印的字典、列表之類的對象,一般沒經過解碼
如果你要輸出解碼的漢字,處理方法:
一,對每個scrapy抓取的數據都進行for循環decod
a={1:"你好",2:"謝謝",3:"對不起",4:"hi"}
forkina.keys():
printk,a[k].decode("utf-8")
二,使用json.mps
a={1:"你好",2:"謝謝",3:"對不起",4:"hi"}
importjson
printjson.mps(a,encoding='UTF-8',ensure_ascii=False)
Ⅲ python基礎——編碼、bytes與str轉換及格式化
對於單個字元的編碼,Python提供了ord()函數獲取字元的整灶啟尺數表示,chr()函數把編碼轉隱高換為對應的字元:
最常用的編碼是UTF-8,如果沒有特殊業務要求,請牢記僅使用UTF-8編碼。
在爬蟲中會經常遇見,需要用encode和decode來進行互相轉碼
str轉bytes
注意,含有中文字元的str不能用acsii格式轉碼
bytes轉str
** 程序中經常會遇到個別字元轉碼不成功而報錯,因此在decode方法中需要這個參數errors='ignore'忽略錯誤的位元組
注旁燃意格式化的數據格式
Ⅳ python3連接MSsql資料庫 中文亂碼怎麼解決
以前用php連mssqy時也經常出現中文亂碼(中文變問號)的問題,那時就明白是編碼沒設置好導航,現在的Python連mssql資料庫也同樣出現這問題,問題一樣,解決的辦法當然也會相似,現在我們來看看解決方法。
python一直對中文支持的不好,最近老遇到編碼問題,而且幾乎沒有通用的方案來解決這個問題,但是對常見的方法都試過之後,發現還是可以解決的,下面總結了常用的支持中文的編碼問題(這些方法中可能其中一個就能解決問題,也可能是多個組合)。
(1)、首先,要保證文件的開頭要加上編碼設置來說明文件的編碼
代碼如下
復制代碼
#encoding=utf-8
(2)、然後,在連接數據的連接參數里加上字元集說明查詢出的結果的編碼,這個不加的後果可能是查詢出的漢字字元都是問號
代碼如下
復制代碼
conn=pymssql.connect(server='.',user='',
password='',database='MyTest',charset='utf8')
(3)、設置python系統的默認編碼(對於文件來說,這招幾乎屢試不爽,呵呵~~)
代碼如下
復制代碼
import
sys
reload(sys)
sys.setdefaultencoding('utf8')
注意:上述編碼是「utf8」,而不是「utf-8」,我也沒弄明白,大部分情況下,這個無所謂的,但是這里我試了必須要是「utf8」
一個簡單的完整的python連接mssqlserver的例子如下(得安裝pymssql包):
代碼如下
復制代碼
#encoding:utf8
import
sys
reload(sys)
sys.setdefaultencoding('utf8')
import
pymssql
try:
conn=pymssql.connect(server='.',user='',
password='',database='MyTest',charset='utf8')
sql="select
*
from
UserInfo"
cur=conn.cursor()
cur.execute(sql)
data=cur.fetchall()
conn.close()
print
data
except
Exception,e:
print
e
運行結果如下:
代碼如下
復制代碼
[(u'20093501',
u'xb9xf9xbexb8',
u'u7537
',
35,
u'xb4xf3xcfxc0'),
(u'20093502',
u'xbbxc6xc8xd8',
u'u5973
',
34,
u'xc3xc0xc5xae'),
(u'20093503',
u'xc1xeexbaxfcxb3xe5',
u'u7537
',
25,
u'2Bxc7xe0xc4xea'),
(u'20093504',
u'xc8xcexd3xafxd3xaf',
u'u5973
',
24,
u'xc6xafxc1xc1')]
[Finished
in
0.2s]
雖然擺脫了問號和亂碼的困擾,但這仍不是我們想要的結果,但這個確實是正確的,因為結果是utf8編碼。這個現象確實詭異,請教了許多高手,得知,最好的結果就是逐個欄位查詢,才能顯示中文,整個查詢的話,會以utf8的格式顯示出來。
上述代碼中第14行data是整個查詢的結果,如果指定某個具體的欄位,如print
data[0][2](表示取查詢結果的第一行第三列的欄位的值),則會輸出中文。
其實不僅僅是mssqlserver資料庫,mysql(需下載MySQLdb包)、sqllite(python自帶的文件資料庫)、mongodb(需下載PyMongo包)等或者是普通文本文件也是類似的解決方案。