Python教程1-3:中文輸出的問題

在嘗試前面示例的過程中,我想一定也會有小伙伴嘗試用print來輸出我們熟悉的中文字符嗎痴晦?但很不幸的是南吮,通常是失敗了。比如誊酌,你輸入的是print("你好部凑,世界!"),然后運行后并沒有如預(yù)期地輸出“你好碧浊,世界涂邀!”的文字,而是一段出錯信息箱锐。

  File "D:\Dev\python27\1-3printFormat.py", line 1
SyntaxError: Non-ASCII character '\xe4' in file D:\Dev\python27\1-3printFormat.py on line 1, 
but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
[Finished in 1.2s with exit code 1]

這是因為必孤,在默認(rèn)情況下,Python只支持ASCII編碼的字符瑞躺,這個字符集只包含了英文字母敷搪、數(shù)字以及特殊控制符等,合計127幢哨。當(dāng)我們在其中輸入中文字符的時候赡勘,Python就讀不懂了,這就好像你跟一個沒學(xué)過中文的外國人講普通話捞镰,當(dāng)然就不理解了闸与。

其實這是在字符顯示上的一個歷史遺留問題了毙替,早期的計算機系統(tǒng)資源緊缺,所以在字符這類編碼上能省則省践樱,對于英語而言厂画,ASCII通常也就夠用了。

但是不同國家的計算機系統(tǒng)怎么辦呢拷邢?這里面處理方式就不一樣了袱院,Windows默認(rèn)采用的就是針對各種國家發(fā)行不同字符集版本,比如中國大陸采用的是GB2312瞭稼、GBK忽洛,用它來顯示簡體中文的字符。在臺灣省則采用Big5环肘,顯示的是繁體中文欲虚。但是這樣有一個缺點,不同字符集的軟件與文檔在交流的時候就會出現(xiàn)各種問題悔雹,比如一個Big5字符集的軟件在GB2312的Windows中复哆,相關(guān)字符就無法顯示了。

上面這種方式雖然解決了東亞字符等信息在計算機中的存儲與顯示腌零,但也給不同系統(tǒng)間的數(shù)據(jù)交換帶來了很大的問題梯找。所以后來就出現(xiàn)了統(tǒng)一字符編碼的方案,目前應(yīng)用最廣的就是UTF-8莱没。簡單地說,UTF-8字符集足夠的大酷鸦,除了英文字符與控制指示饰躲,它還有足夠的編碼空間來存儲簡體中文、繁體中文臼隔、日語嘹裂、韓語等的字符,這下問題似乎就簡單了摔握,只要大家都使用UTF-8那就不存在字符間的顯示錯亂問題了寄狼。順便說一下,我們所熟知的Android氨淌、iOS等手機操作系統(tǒng)泊愧,以及Mac、Linux等桌面操作系統(tǒng)盛正,采用的編碼就是UTF-8删咱。

然而,作為世界上使用率最廣的操作系統(tǒng)豪筝,Windows默認(rèn)采用的依然是原先的編碼方案(雖然它在系統(tǒng)中也集成了UTF-8字符讀寫的功能)痰滋,所以這也就造成了很多時候文件交流上的不便摘能。比如,你在Windows上用記事本程序創(chuàng)建的一個文本文件敲街,復(fù)制到Mac中用TextEdit打開的時候团搞,卻可能是亂碼。

如果你沒有接觸過除Windows之外的系統(tǒng)多艇,那么我可以舉一個更常見的例子逻恐。比如下圖是一個用UTF-8編碼的網(wǎng)頁,在正常情況下墩蔓,即以UTF-8編碼打開的時候梢莽,顯示的效果是這樣的。

UTF-8編碼

然而奸披,當(dāng)我們轉(zhuǎn)而用GB18030編碼方案來打開的時候昏名,你就會發(fā)現(xiàn),世道變了阵面,字符亂了轻局。

GB18030編碼

如果你要體驗一下,可以隨便打開一個網(wǎng)頁样刷,然后在瀏覽器的編碼切換菜單中更換一種編碼方案來瀏覽仑扑。不同的瀏覽器更改編碼方案的操作不一,以QQ瀏覽器為例置鼻,可以右鍵單擊镇饮,選擇”編碼”。


更換編碼方案

我知道箕母,你可能又有問題了储藐,那既然網(wǎng)頁是UTF-8編碼,而Windows默認(rèn)的不是UTF-8嘶是,那為什么我們的瀏覽器默認(rèn)情況下就可以正常選擇UTF-8來顯示輸出呢钙勃?這是因為,在編寫網(wǎng)頁的HTML文件頭部聂喇,通常會有一個類似于<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>的聲明辖源,這個標(biāo)簽的意思是告訴瀏覽器,當(dāng)前文檔是一個HTML文檔希太,采用的字符集是UTF-8克饶。

作了這么多的鋪墊,差不多是可以介紹如何解決這個問題了誊辉。方法非常的簡單彤路,我們也只需要像HTML文件一樣,在文件的頭部聲明一下這個文檔采用UTF-8編碼(當(dāng)然你要選擇別的編碼也行)就可以了芥映。Python中聲明的格式如下:

# coding: UTF-8

此外洲尊,你也可以用coding = 編碼方案的方式來表示远豺。更加規(guī)范的表示方式是# -*- coding: -*-,這樣在辯識度上更好坞嘀,但從效果上是一樣的躯护。

現(xiàn)在問題就解決了,我們在包含了中文信息的文件頭部增加上面的聲明信息丽涩,保存了就可以正常運行了棺滞。

中文字符的輸出

順便說一下,你設(shè)置了UTF-8格式的編碼方案后矢渊,也需要同時將此文檔另存為UTF-8格式继准。在Sublime Text中,默認(rèn)就已經(jīng)是UTF-8了矮男,但在其它的編輯器里移必,你需要在選項或者保存對話框中選擇一下。以“記事本”為例毡鉴,可以在保存對話框的編碼中選擇“UTF-8”崔泵。

另存為UTF-8(記事本)

建議閱讀:https://www.python.org/dev/peps/pep-0263/#defining-the-encoding

我有意申請簡書與微博的聯(lián)合認(rèn)證作者,條件之一是寫作的文章需要有2000個喜歡猪瞬,所以你點個贊再走吧憎瘸,也歡迎你訂閱本人編輯的專題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市陈瘦,隨后出現(xiàn)的幾起案子幌甘,更是在濱河造成了極大的恐慌,老刑警劉巖痊项,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锅风,死亡現(xiàn)場離奇詭異,居然都是意外死亡线婚,警方通過查閱死者的電腦和手機遏弱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門盆均,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塞弊,“玉大人,你說我怎么就攤上這事泪姨∮窝兀” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵肮砾,是天一觀的道長诀黍。 經(jīng)常有香客問我,道長仗处,這世上最難降的妖魔是什么眯勾? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任枣宫,我火速辦了婚禮,結(jié)果婚禮上吃环,老公的妹妹穿的比我還像新娘也颤。我一直安慰自己,他們只是感情好郁轻,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布翅娶。 她就那樣靜靜地躺著,像睡著了一般好唯。 火紅的嫁衣襯著肌膚如雪竭沫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天骑篙,我揣著相機與錄音蜕提,去河邊找鬼。 笑死替蛉,一個胖子當(dāng)著我的面吹牛贯溅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躲查,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼它浅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了镣煮?” 一聲冷哼從身側(cè)響起姐霍,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎典唇,沒想到半個月后镊折,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡介衔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年恨胚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炎咖。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡赃泡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乘盼,到底是詐尸還是另有隱情升熊,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布绸栅,位于F島的核電站级野,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粹胯。R本人自食惡果不足惜蓖柔,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一辰企、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧况鸣,春花似錦蟆豫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至愤估,卻和暖如春帮辟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玩焰。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工由驹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昔园。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓蔓榄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親默刚。 傳聞我的和親對象是個殘疾皇子甥郑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容