欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 詳解python中文編碼問題

詳解python中文編碼問題

熱門標簽:老人電話機器人 無錫客服外呼系統一般多少錢 北京電信外呼系統靠譜嗎 梅州外呼業務系統 洪澤縣地圖標注 大連crm外呼系統 高德地圖標注是免費的嗎 百度地圖標注位置怎么修改 地圖標注視頻廣告

 1.        在Python中使用中文

在Python中有兩種默認的字符串:str和unicode。在Python中一定要注意區分“Unicode字符串”和“unicode對象”的區別。后面所有的“unicode字符串”指的都是python里的“unicode對象”。

事實上在Python中并沒有“Unicode字符串”這樣的東西,只有“unicode”對象。一個傳統意義上的unicode字符串完全可以用str對象表示。只是這時候它僅僅是一個字節流,除非解碼為unicode對象,沒有任何實際的意義。

我們用“哈哈”在多個平臺上測試,其中“哈”對應的不同編碼是:

1.              UNICODE (UTF8-16),      C854;

2.              UTF-8,                    E59388;

3.              GBK,               B9FE。

1.1     Windows控制臺

下面是在windows控制臺的運行結果:

 

可以看出在控制臺,中文字符的編碼是GBK而不是UTF-16。將字符串s(GBK編碼)使用decode進行解碼后,可以得到同等的unicode對象。

注意:可以在控制臺打印ss并不代表它可以直接被序列化,比如:

 

向文件直接輸出ss會拋出同樣的異常。在處理unicode中文字符串的時候,必須首先對它調用encode函數,轉換成其它編碼輸出。這一點對各個環境都一樣。

總結:在Python中,“str”對象就是一個字節數組,至于里面的內容是不是一個合法的字符串,以及這個字符串采用什么編碼(gbk, utf-8, unicode)都不重要。這些內容需要用戶自己記錄和判斷。這些的限制也同樣適用于“unicode”對象。要記住“unicode”對象中的內容可絕對不一定就是合法的unicode字符串,我們很快就會看到這種情況。

總結:在windows的控制臺上,支持gbk編碼的str對象和unicode編碼的unicode對象。

1.2     Windows IDLE(在Shell上運行)

在windows下的IDLE中,運行效果和windows控制臺不完全一致:

 

可以看出,對于不使用“u”作標識的字符串,IDLE把其中的中文字符進行GBK編碼。但是對于使用“u”的unicode字符串,IDLE居然一樣是用了GBK編碼,不同的是,這時候每一個字符都是unicode(對象)字符!!此時len(ss) = 4。

這樣產生了一個神奇的問題,現在的ss無法在IDLE中正常顯示。而且我也沒有辦法把ss轉換成正常的編碼!比如采用下面的方法:

 

這有可能是因為IDLE本地化做得不夠好,對中文的支持有問題。建議在IDLE的SHELL中,不要使用u“中文”這種方式,因為這樣得到的并不是你想要的東西。

這同時說明IDLE的Shell支持兩種格式的中文字符串:GBK編碼的“str”對象,和UNICODE編碼的unicode對象。

1.3     在IDLE上運行代碼

在IDLE的SHELL上運行文件,得到的又是不同的結果。文件的內容是:

 

直接運行的結果是:

 

毫無瑕疵,相當令人滿意。我沒有試過其它編碼的文件是否能正常運行,但想來應該是不錯的。

同樣的代碼在windows的控制臺試演過,也沒有任何問題。

 1.4     Windows Eclipse

在Eclipse中處理中文更加困難,因為在Eclipse中,編寫代碼和運行代碼屬于不同的窗口,而且他們可以有不同的默認編碼。對于如下代碼:

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
s = "哈哈"
ss = u'哈哈'
 
print repr(s)
print repr(ss)
 
print s.decode('utf-8').encode('gbk')
print ss.encode('gbk')
 
print s.decode('utf-8')
print ss

前四個print運行正常,最后兩個print都會拋出異常:
'/xe5/x93/x88/xe5/x93/x88'
u'/u54c8/u54c8'
哈哈
哈哈
Traceback (most recent call last):
 File "E:/Workspace/Eclipse/TestPython/Test/test_encoding_2.py", line 13, in module>
    print s.decode('utf-8')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

也就是說,GBK編碼的str對象可以正常打印,但是不能打印UNICODE編碼的unicode對象。在源文件上點擊“Run as”“Run”,然后在彈出對話框中選擇“Common”:

 

可以看出Eclipse控制臺的缺省編碼方式是GBK;所以不支持UNICODE也在情理之中。如果把文件中的coding修改成GBK,則可以直接打印GBK編碼的str對象,比如s。

如果把源文件的編碼設置成“UTF-8”,把控制臺的編碼也設置成“UTF-8”,按道理說打印的時候應該沒有問題。但是實驗表明,在打印UTF-8編碼的str對象時,中文的最后一個字符會顯示成亂碼,無法正常閱讀。不過我已經很滿足了,至少人家沒有拋異常不是:)

BTW: 使用的Eclipse版本是3.2.1。

1.5     從文件讀取中文

在window下面用記事本編輯文件的時候,如果保存為UNICODE或UTF-8,分別會在文件的開頭加上兩個字節 “/xFF/xFE” 和三個字節“/xEF/xBB/xBF”。在讀取的時候就可能會遇到問題,但是不同的環境對這幾個多于字符的處理也不一樣。

以windows下的控制臺為例,用記事本保存三個不同版本的“哈哈”。  

打開utf-8格式的文件并讀取utf-8字符串后,解碼變成unicode對象。但是會把附加的三個字符同樣進行轉換,變成一個unicode字符,字符的數據值為“/xFF/xFE”。這個字符不能被打印。編碼的時候需要跳過這個字符。

 

打開unicode格式的文件后,得到的字符串正確。這時候適用utf-16解碼,能得到正確的unicdoe對象,可以直接使用。多余的那個填充字符在進行轉換時會被過濾掉。  

 

打開ansi格式的文件后,沒有填充字符,可以直接使用。
結論:讀寫使用python生成的文件沒有任何問題,但是在處理由notepad生成的文本文件時,如果該文件可能是非ansi編碼,需要考慮如何處理填充字符。

1.6     在數據庫中使用中文

剛剛接觸Python,我用的數據庫是mysql。在執行插入、查找等操作時,如果運行環境使用的字符編碼和mysql不一致,就可能導致運行時的錯誤。當然,和上面看到的情況一樣,運行環境并不是關鍵因素,關鍵是查詢語句的編碼方式。如果在每次執行查詢操作時都把查詢字符串做一次編碼轉換,轉變成mysql的默認字符編碼,一樣不會遇到問題。但是這樣寫代碼也太痛苦了吧。

使用如下代碼連接數據庫:

self.conn = MySQLdb.connect(use_unicode = 1, charset='utf8', **server)

我不能理解的是既然數據庫用的默認編碼是UTF-8,我連接的時候也用的是UTF-8,為什么查詢得到的文本內容卻是UNICODE編碼(unicode對象)?這是MySQLdb庫的設置么?

1.7     在XML中使用中文

使用xml.dom.minidom和MySQLdb類似,對生成的dom對象調用toxml方法得到的是unicode對象。如果希望輸出utf-8文本,有兩種方法:

1.使用系統函數
在輸出xml文檔的時候進行編碼,這是我覺得最好的方法。

xmldoc.toxml(encoding='utf-8')
xmldoc.writexml(outfile, encoding = ‘utf-8')

2.自己編碼生成

在使用toxml之后可以調用encode方法對文檔進行編碼。但這種方法無法得到合適的xml declaration(xml文檔第一行中的encoding部分)。
不要嘗試通過xmldoc.createProcessingInstruction來創建一個processing instraction:

?xml version='1.0' encoding='utf-8'?>

xml declaration雖然看起來像是,但是事實上并不是一個processing instraction。可以通下面的方法得到一個滿意的xml文件:

print >> outfile, “?xml version='1.0' encoding='utf-8'?>”
print >> outfile, xmldoc.toxml().encode(‘utf-8')[22:]

其中第二行需要過濾掉在調用xmldoc.toxml時生成的“?xml version='1.0' ?>”,它的長度是22。

相面是兩種方法的用法比較:

 

另外,在IDLE的shell中,不要用 u'中文' 對屬性進行賦值。上面討論過,這樣得到的unicode字符串不正確。

到此這篇關于python中文編碼問題的文章就介紹到這了,更多相關中文編碼內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 用基于python的appium爬取b站直播消費記錄
  • 女友半夜加班發自拍 python男友用30行代碼發現驚天秘密
  • 前女友發來加密的"520快樂.pdf",我用python破解開之后,卻發現...
  • 在前女友婚禮上用python把婚禮現場的WIFI名稱改成了

標簽:泉州 岳陽 長春 安慶 怒江 清遠 洛陽 吉林

巨人網絡通訊聲明:本文標題《詳解python中文編碼問題》,本文關鍵詞  詳解,python,中文,編碼,問題,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解python中文編碼問題》相關的同類信息!
  • 本頁收集關于詳解python中文編碼問題的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    成人精品视频一区二区三区| 91av在线免费| 欧美美女性生活视频| 欧美大胆人体bbbb| 亚洲一区在线观看免费观看电影高清| 成人午夜av在线| 希岛爱理中文字幕| 中文无字幕一区二区三区| 国产传媒欧美日韩成人| 特黄一区二区三区| 日本一区二区三区国色天香 | 亚洲一区二区视频在线观看| 99国产欧美久久久精品| 色拍拍在线精品视频8848| 日韩一区中文字幕| av在线不卡观看免费观看| 色婷婷av一区二区| 一区二区三区四区av| 亚洲黄色小说在线观看| 欧美日韩aaaaaa| 偷拍一区二区三区| 欧美成人午夜精品免费| 精品国产凹凸成av人网站| 精品一区二区在线观看| 国产第一页精品| 国产精品久久久久久久久久免费看 | 国产精品色哟哟网站| 成人自拍视频在线观看| 日本高清不卡aⅴ免费网站| 一区二区三区欧美视频| 欧美夫妇交换xxx| 欧美xxxx老人做受| 国产麻豆91精品| 色综合网站在线| 一区二区三区中文字幕精品精品| 亚洲av无码专区在线播放中文| 日韩一级免费观看| 国产一区二区三区美女| 日本天堂中文字幕| 亚洲成人资源网| 一区二区黄色片| 国产精品欧美久久久久无广告| a级大片免费看| 日韩三级高清在线| 国产精品一卡二卡| 日本韩国欧美三级| 蜜臀久久久99精品久久久久久| 老司机福利在线观看| 亚洲人成精品久久久久| 性囗交免费视频观看| 国产亚洲一本大道中文在线| a美女胸又www黄视频久久| 91精品国产综合久久精品性色| 精品一区二区三区香蕉蜜桃| 深夜福利影院在线观看| 日日夜夜免费精品视频| 毛片久久久久久| 一区二区三区91| 在线小视频你懂的| 亚洲免费毛片网站| 国产传媒第一页| √…a在线天堂一区| 男男做爰猛烈叫床爽爽小说| 日本一区二区不卡视频| 国产高潮失禁喷水爽到抽搐| 久久精品男人的天堂| 丰满少妇一区二区三区专区| 精品福利一区二区三区 | 91精品办公室少妇高潮对白| 日本人妖一区二区| 国产精品久久久久久久精| 日韩精品成人一区二区三区| 人人澡人人澡人人看| 天堂在线亚洲视频| 一本久道中文字幕精品亚洲嫩| 日本不卡在线视频| 91久久奴性调教| 国产一区二区久久| 9191久久久久久久久久久| 国产69精品久久99不卡| 欧美一区二区在线不卡| av爱爱亚洲一区| 久久久精品tv| 97香蕉碰碰人妻国产欧美| 中文字幕一区二区三区不卡在线| 伊人网在线视频观看| 亚洲成人av一区| 色偷偷久久一区二区三区| 精品在线你懂的| 欧美精品在线观看播放| 波多野结衣在线一区| 久久亚洲影视婷婷| 亚洲av成人片无码| 亚洲欧美激情插| 国产在线免费看| 久草中文综合在线| 欧美一级片在线看| 国模大尺度视频| 中文字幕中文乱码欧美一区二区| 香蕉视频久久久| 三级不卡在线观看| 欧美揉bbbbb揉bbbbb| av亚洲精华国产精华| 97久久人人超碰| 色婷婷激情一区二区三区| 精品一区二区免费看| 91精品久久久久久蜜臀| 久草福利在线观看| 亚洲人午夜精品天堂一二香蕉| 国产精品麻豆一区| 国产在线不卡一卡二卡三卡四卡| 日韩欧美中文一区二区| 亚洲av无码一区二区三区网址| 亚洲一二三四区不卡| 91国产视频在线观看| 国产99精品国产| 国产欧美一区二区精品久导航 | 男人av资源站| 国产乱人伦精品一区二区在线观看| 欧美成人一区二区三区片免费 | 夜夜嗨av一区二区三区网页| 成年人av电影| 成人av电影在线观看| 国产精品久久久久久妇女6080| 一本在线免费视频| 久久99久久99小草精品免视看| 欧美精品精品一区| www.com日本| 亚洲综合久久久| 欧美日韩视频专区在线播放| 一区二区三区人妻| 亚洲成人av电影| 日韩一区二区视频在线观看| 久久久久久久久免费看无码| 日本中文在线一区| 精品国产一区二区三区久久久蜜月 | 亚洲高清免费在线| 欧美日韩高清一区二区| 四虎精品一区二区| 日本成人在线电影网| 精品剧情v国产在线观看在线| 女人又爽又黄免费女仆| 国内精品久久久久影院色| 亚洲国产精品激情在线观看| 99re在线视频精品 | 国产在线播精品第三| 国产亚洲欧美激情| 日韩一区二区不卡视频| 97精品电影院| 亚洲成a人片综合在线| 日韩三级精品电影久久久| 女人十八毛片嫩草av| 国v精品久久久网| 亚洲蜜臀av乱码久久精品蜜桃| 欧美色视频一区| 国产呦小j女精品视频| 狠狠色狠狠色合久久伊人| 中文字幕第一页久久| 欧美性欧美巨大黑白大战| 波多野结衣视频播放| 极品销魂美女一区二区三区| 中文字幕日本乱码精品影院| 欧美日韩中文另类| 大又大又粗又硬又爽少妇毛片 | 狠狠色丁香婷综合久久| 中文字幕视频一区二区三区久| 欧美日韩午夜精品| 日韩女同一区二区三区| 成人av电影免费在线播放| 天天av天天翘天天综合网| 久久精品亚洲麻豆av一区二区| 色综合天天综合狠狠| 美女久久久久久久久| 国内精品国产成人国产三级粉色 | 在线免费观看视频一区| 日本黄色片在线播放| 国产美女视频91| 亚洲午夜一区二区| 久久久久久久久免费| 在线观看成人免费视频| 日本五十肥熟交尾| 粉嫩高潮美女一区二区三区| 亚洲第一二三四区| 久久久久久久久久久久久夜| 在线观看区一区二| 午夜时刻免费入口| 91免费观看视频| 黑人巨大精品欧美一区| 一区二区三区不卡视频 | 亚洲永久无码7777kkk| 成人夜色视频网站在线观看| 亚洲成人黄色影院| 中文字幕在线播放不卡一区| 欧美一卡二卡三卡四卡| 日韩一级片av| 女人又爽又黄免费女仆| 国产吃瓜黑料一区二区| 国产盗摄女厕一区二区三区| 午夜伦理一区二区| 国产精品国产三级国产有无不卡 |