欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 設置文件編碼格式的實現(xiàn)方法

 更新時間:2017年12月21日 10:03:16   作者:Abyjun  
下面小編就為大家分享一篇python 設置文件編碼格式的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

如果要在python2的py文件里面寫中文,則必須要添加一行聲明文件編碼的注釋,否則python2會默認使用ASCII編碼。(python3已經(jīng)沒有這個問題了,python3默認的文件編碼是UTF-8)

必須將編碼注釋放在第一行或者第二行,一般來說,Python文件的前兩行要這樣寫:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

其中第一行是指定python解釋器,第二行是指定python文件編碼方式,設置編碼方式有以下可選的方法

1. 帶等號的設置方法:

#!/usr/bin/python
# coding=<encoding name>

2. 最常見的,帶冒號的(大多數(shù)編輯器都可以正確識別的):

#!/usr/bin/python
# -*- coding: <encoding name> -*-

3. vim的:

#!/usr/bin/python
# vim: set fileencoding=<encoding name> :

設置頭部的編碼聲明有以下幾個作用:

如果代碼中有中文注釋,就需要此聲明

比較高級的編輯器(比如我的emacs),會根據(jù)頭部聲明,將此作為代碼文件的格式。

程序會通過頭部聲明,解碼初始化 u”人生苦短”,這樣的unicode對象,(所以頭部聲明和代碼的存儲格式要一致)

設置默認解碼格式

import sys  #引用sys模塊進來,并不是進行sys的第一次加載 
reload(sys) #重新加載sys 
sys.setdefaultencoding('utf8') ##調用setdefaultencoding函數(shù)

這里特別注意的是第二行的reload(sys),這個一定不能少,少了的話就不能正確運行。那么為什么要重新加載,而直接引用過來則不能調用該函數(shù)呢?因為setdefaultencoding函數(shù)在被系統(tǒng)調用后被刪除了,所以通過import引用進來時其實已經(jīng)沒有了,所以必須reload一次sys模塊,這樣setdefaultencoding才會為可用,才能在代碼里修改解釋器當前的字符編碼。

在python安裝目錄的Lib文件夾下,有一個叫site.py的文件,在里面可以找到main() –> setencoding()–>sys.setdefaultencoding(encoding),因為這個site.py每次啟動python解釋器時會自動加載,所以main函數(shù)每次都會被執(zhí)行,setdefaultencoding函數(shù)一出來就已經(jīng)被刪除了。

關于 sys.defaultencoding,這個在解碼沒有明確指明解碼方式的時候使用。比如我有如下代碼:

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' # 注意這里的 str 是 str 類型的,而不是 unicode 
s.encode('gb18030') 

這句代碼將 s 重新編碼為 gb18030 的格式,即進行 unicode -> str 的轉換。因為 s 本身就是 str 類型的,因此

Python 會自動的先將 s 解碼為 unicode ,然后再編碼成 gb18030。因為解碼是python自動進行的,我們沒有指明解碼方式,python 就會使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是

ANSCII,如果 s 不是這個類型就會出錯。拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯了:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 
0: ordinal not in range(128) 

對于這種情況,我們有兩種方法來改正錯誤:

一是明確的指示出 s 的編碼方式

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' 
s.decode('utf-8').encode('gb18030') 

二是更改 sys.defaultencoding 為文件的編碼方式

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
import sys 
reload(sys) # Python2.5 初始化后會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入 
sys.setdefaultencoding('utf-8') 
str = '中文' 
str.encode('gb18030')

以上這篇python 設置文件編碼格式的實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python中的各種裝飾器解析

    Python中的各種裝飾器解析

    這篇文章主要介紹了Python中的各種裝飾器解析,Python裝飾器可以在不改變函數(shù)原實現(xiàn)方式的前提下,為函數(shù)添加額外的功能,需要的朋友可以參考下
    2023-11-11
  • 解決Python爬蟲錯誤之twisted.web.error.SchemeNotSupported: Unsupported scheme: b''

    解決Python爬蟲錯誤之twisted.web.error.SchemeNotSupported: Unsu

    這篇文章主要介紹了解決Python爬蟲錯誤之twisted.web.error.SchemeNotSupported: Unsupported scheme: b''問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python continue繼續(xù)循環(huán)用法總結

    Python continue繼續(xù)循環(huán)用法總結

    本篇文章給大家總結了關于Python continue繼續(xù)循環(huán)的相關知識點以及用法,有需要的朋友跟著學習下吧。
    2018-06-06
  • python之virtualenv的簡單使用方法(必看篇)

    python之virtualenv的簡單使用方法(必看篇)

    下面小編就為大家分享一python之virtualenv的簡單使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • 使用Python中的PIL庫給圖片添加馬賽克

    使用Python中的PIL庫給圖片添加馬賽克

    Pillow是一個Python圖像處理庫,提供了廣泛的圖像處理功能包括圖像格式轉換、圖像增強等,本文就來用PIL庫實現(xiàn)給圖片添加馬賽克效果,感興趣的可以了解一下
    2023-05-05
  • python基于tkinter制作下班倒計時工具

    python基于tkinter制作下班倒計時工具

    這篇文章主要介紹了python基于tkinter制作倒計時工具的方法,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python性能優(yōu)化的20條建議

    Python性能優(yōu)化的20條建議

    不論什么語言我們都需要注意性能優(yōu)化問題,提高執(zhí)行效率,這里就為大家分享下Python的性能優(yōu)化技巧,需要的朋友可以參考下
    2014-10-10
  • Python中shapefile轉換geojson的示例

    Python中shapefile轉換geojson的示例

    今天小編就為大家分享一篇關于Python中shapefile轉換geojson的示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 解決keras,val_categorical_accuracy:,0.0000e+00問題

    解決keras,val_categorical_accuracy:,0.0000e+00問題

    這篇文章主要介紹了解決keras,val_categorical_accuracy:,0.0000e+00問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python新手必讀bytearray對象使用技巧掌握

    Python新手必讀bytearray對象使用技巧掌握

    Python中的bytearray是一個可變序列,通常用于存儲二進制數(shù)據(jù),它允許在不創(chuàng)建新的對象的情況下就地修改數(shù)據(jù),非常適用于處理字節(jié)數(shù)據(jù),本文將深入學習bytearray對象的使用,包括創(chuàng)建、修改、切片和常見應用場景
    2023-12-12

最新評論