最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python編碼爬坑指南(必看)

 更新時間:2016年06月10日 11:45:11   投稿:jingxian  
下面小編就為大家?guī)硪黄狿ython編碼爬坑指南(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

自己最近有在學習python,這實在是一門非常短小精悍的語言,很喜歡這種語言精悍背后又有強大函數(shù)庫支撐的語言??墒莿偨佑|不久就遇到了讓人頭疼的關(guān)于編碼的問題,在網(wǎng)上查了很多資料現(xiàn)在在這里做一番總結(jié),權(quán)當一個記錄也為后來的兄弟姐妹們服務(wù),如果可以讓您少走一些彎路本人將倍感榮幸。

先來描述下現(xiàn)象吧:

import os
for i in os.listdir("E:\Torchlight II"):
  print i

代碼很簡單我們使用os的listdir函數(shù)遍歷了E:\Torchlight II這個目錄(Torchlight ?! :)),由于這個目錄下有些文件是以中文命名的,所以在最后print結(jié)果時出現(xiàn)了亂碼,像這樣:

那么問題出在哪兒呢? 別急,我們一點一點來分析它。

這里這里我們幾乎能夠肯定的知道問題是出在:

This means that the python console app can't write the given character to the console's encoding.
More specifically, the python console app created a _io.TextIOWrapperd instance with an encoding that cannot represent the given character.
sys.stdout --> _io.TextIOWrapperd --> (your console)

看到這里不知你是否與我想的一樣,能不能去設(shè)置console的編碼,將其設(shè)置為能夠理解中文字符的編碼不就可以正常的顯示出中文了嗎?等等,讓我們在多Google一會兒,

Python determines the encoding of stdout and stderr based on the value of the LC_CTYPE variable, but only if the stdout is a tty. So if I just output to the terminal, LC_CTYPE (or LC_ALL) define the encoding. However, when the output is piped to a file or to a different process, the encoding is not defined, and defaults to 7-bit ASCII.

更詳細的說明如下:

1). When Python finds its output attached to a terminal, it sets the sys.stdout.encoding attribute to the terminal's encoding. The print statement's handler will automatically encode unicode arguments into str output.
2). When Python does not detect the desired character set of the output, it sets sys.stdout.encoding to None, and print will invoke the "ascii" codec.

嚯嚯,看來剛才的想法是可行的只是不太優(yōu)雅罷了,因為我們得去修改系統(tǒng)的設(shè)置。事實上上面的論述是基于linux環(huán)境的,在linux下可能需要我們?nèi)ジ哪硞€環(huán)境變量的值(LC_CTYPE or LANG);如果我們是在windows下面的話,console的編碼設(shè)置是跟操作系統(tǒng)的區(qū)域設(shè)置相關(guān)的。比如在中文的win7環(huán)境下,console默認的編碼就是GBK(cp936)。你可以試試下面的代碼:

import locale
print locale.getdefaultlocale()[1]

console的編碼不好設(shè)置了那能否對stdout.out.encoding進行設(shè)置以達到我們的目的呢?很遺憾,答案是否定的,這家伙壓根就是只讀的:

沒有辦法了么?不會,其實我們離成功已經(jīng)很近了,來,根據(jù)上面檢索到的那些資料分析整理下看看我們現(xiàn)在掌握到的情況都有哪些:

 

1). console不能正常顯示中文,console的編碼是由操作系統(tǒng)決定的(windows環(huán)境下);
 2). 我的操作系統(tǒng)是win7中文版(GBK),enc = locale.getdefaultlocale()[1];
 3). console的編碼決定了sys.stdout.encoding的取值,sys.stdout.encoding = utf-8;
 4). 從操作系統(tǒng)枚舉目錄(E:\Torchlight II)列表返回的字符串也是GBK編碼

 是不是已經(jīng)看出問題來了。最上面截圖中那么奇奇怪怪的問號尖角符號就是因為字符串本身是按照gbk進行編碼的,但是由于sys.stdout.encoding = utf-8,導致print會按照utf-8對input的數(shù)據(jù)進行encode從而轉(zhuǎn)換為unicode字符。這,當然錯誤了。原因已經(jīng)清楚了,來改改代碼吧:

import os
for i in os.listdir("E:\Torchlight II"):
  print i.decode('gbk')

在代碼中我們手動告訴了python對讀入的字符串按章gbk編碼來進行解碼,而這一個動作之后數(shù)據(jù)已經(jīng)是標準的unicode字符了,可以放心的交給print去打印輸出了(即使這會兒sys.stdout.encoding = utf-8):

 ps:

實際在google中還查到過很多相關(guān)的類似編碼的問題,比如這里的,還有這里的。雖然問題的樣子千變?nèi)f化并且解決方式多種多樣甚至是python自己的特定解決方式,比如這里。但這些問題本質(zhì)都是一樣的都是關(guān)于字符的編碼和解碼,搞清楚了其中的本質(zhì)所有問題都能夠迎刃而解。

以上這篇Python編碼爬坑指南(必看)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實現(xiàn)的文件夾清理程序分享

    python實現(xiàn)的文件夾清理程序分享

    這篇文章主要介紹了python實現(xiàn)的文件夾清理程序分享,可以按時間清理和指定配置文件清理,需要的朋友可以參考下
    2014-11-11
  • Python線程之線程安全的隊列Queue

    Python線程之線程安全的隊列Queue

    這篇文章主要介紹了Python線程之線程安全的隊列,是否有一種神器,能解決線程/并發(fā)的問題呢?它就是隊列Queue,下面進入文章和小編學習Queue的相關(guān)資料吧
    2022-02-02
  • 使用Python將長圖片分割為若干張小圖片

    使用Python將長圖片分割為若干張小圖片

    這篇文章主要為大家詳細介紹了如何使用Python將長圖片分割為若干張小圖片,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-01-01
  • Python爬蟲之網(wǎng)頁圖片抓取的方法

    Python爬蟲之網(wǎng)頁圖片抓取的方法

    最近小編一直在學習python的東西,今天小編給大家分享基于python寫的一個爬蟲程序,能實現(xiàn)簡單的網(wǎng)頁圖片下載,具體實例代碼大家參考下本文
    2018-07-07
  • python簡單的函數(shù)定義和用法實例

    python簡單的函數(shù)定義和用法實例

    這篇文章主要介紹了python簡單的函數(shù)定義和用法,實例分析了Python自定義函數(shù)及其使用方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • Numpy之布爾索引的實現(xiàn)

    Numpy之布爾索引的實現(xiàn)

    本文主要介紹了Numpy之布爾索引的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • scrapy中如何設(shè)置應用cookies的方法(3種)

    scrapy中如何設(shè)置應用cookies的方法(3種)

    這篇文章主要介紹了scrapy中如何設(shè)置應用cookies的方法(3種),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Python的__builtin__模塊中的一些要點知識

    Python的__builtin__模塊中的一些要點知識

    這篇文章主要介紹了Python的__builtin__模塊中的一些要點知識,是Python學習中的基礎(chǔ),需要的朋友可以參考下
    2015-05-05
  • Python實現(xiàn)對大量表格文件數(shù)據(jù)處理的方法詳解

    Python實現(xiàn)對大量表格文件數(shù)據(jù)處理的方法詳解

    這篇文章主要為大家介紹了如何基于Python語言實現(xiàn)對大量表格文件加以數(shù)據(jù)截取、逐行求差、跨文件合并等處理,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-05-05
  • jupyter讀取錯誤格式文件的解決方案

    jupyter讀取錯誤格式文件的解決方案

    這篇文章主要介紹了jupyter讀取錯誤格式文件的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

民乐县| 上犹县| 青川县| 万山特区| 陇川县| 文水县| 博野县| 科技| 西充县| 临猗县| 三亚市| 大同县| 温宿县| 阳曲县| 新化县| 长宁县| 西昌市| 巨鹿县| 永春县| 靖安县| 雅安市| 兴宁市| 老河口市| 汕头市| 江孜县| 车险| 海林市| 保康县| 舞阳县| 新乡县| 乌拉特中旗| 潮州市| 济源市| 桐乡市| 阿瓦提县| 会理县| 宜兴市| 宁城县| 马边| 阿巴嘎旗| 囊谦县|