Python對中文的支持壹直很差,最近又總是遇到編碼問題,而且幾乎沒有通用的解決方案。但是在嘗試了所有常用的方法後,發現還是可以解決的。下面總結了常用的支持中文的編碼問題(其中壹種方法可能解決問題,也可能是幾種方法的組合)。
(1),首先確保在文件開頭添加編碼設置,說明文件的編碼。
代碼如下所示
復制代碼
#編碼=utf-8
(2)然後,將字符集添加到連接數據的連接參數中,以解釋查詢結果的代碼。這種遺漏的後果可能就是查詢到的漢字都是問號。
代碼如下所示
復制代碼
conn=pymssql.connect(server= ' . ',用戶=“”,
密碼= ' ',數據庫='MyTest ',字符集='utf8 ')
(3)設置python系統的默認編碼(對於文件,這種方法幾乎都試過,呵呵~ ~)
代碼如下所示
復制代碼
進口
[計]系統復制命令(system的簡寫)
重新加載(系統)
sys.setdefaultencoding('utf8 ')
註意:以上編碼是utf8,不是utf-8。我也不懂。大多數情況下沒關系,但是我在這裏試過,肯定是utf8。
下面是壹個簡單完整的python與mssqlserver的連接示例(必須安裝pymssql包):
代碼如下所示
復制代碼
#編碼:utf8
進口
[計]系統復制命令(system的簡寫)
重新加載(系統)
sys.setdefaultencoding('utf8 ')
進口
pymssql
嘗試:
conn=pymssql.connect(server= ' . ',用戶=“”,
密碼= ' ',數據庫='MyTest ',字符集='utf8 ')
sql= "選擇
*
從
用戶信息"
cur=conn.cursor()
當前執行(sql)
data=cur.fetchall()
conn.close()
打印
數據
除...之外
例外情況,e:
打印
e
運行結果如下:
代碼如下所示
復制代碼
[(u'20093501 ',
u'xb9xf9xbexb8 ',
u'u7537
,
35,
u'xb4xf3xcfxc0 '),
(u'20093502 ',
u ' xbb xc 6 CX 8 xd 8 ',
u'u5973
,
34,
u'xc3xc0xc5xae '),
(u'20093503 ',
u ' xc 1x eexbafcxb3 xe 5 ',
u'u7537
,
25,
u'2Bxc7xe0xc4xea '),
(u'20093504 ',
u'xc8xcexd3xafxd3xaf ',
u'u5973
,
24,
u'xc6xafxc1xc1')]
[完成
在
0.2s]
雖然我們去掉了問號和亂碼,但這仍然不是我們想要的結果,但確實是正確的,因為結果是utf8編碼。這種現象真的很奇怪。咨詢了很多專家後得知,最好的結果是壹次查詢壹個字段顯示中文,整個查詢會以utf8格式顯示。
上面代碼中14行的數據是整個查詢的結果。如果指定了特定字段,如打印,
Data[0][2](表示查詢結果第壹行第三列字段的值),將輸出中文。
其實不僅是mssqlserver數據庫,mysql (MySQLdb包需要下載)、sqllite(python自帶的文件數據庫)、mongodb (PyMongo包需要下載)或者普通的文本文件都是類似的解決方案。