導航:首頁 > 編程語言 > python文本文件編碼

python文本文件編碼

發布時間:2022-05-07 22:37:55

A. python2.7 中文字元編碼,使用Unicode時,選擇什麼編碼格式

  1. 終端顯示字元的編碼(windows下終端是cmd,linux下是各種terminal,遠程登錄是putty或者xshell)

  2. shell環境的編碼。比如中文版windows用的是gbk(向下兼容gb2312),大多數linux發行版使用的是utf-8(LANG=zh_CN.UTF-8)。

  3. 文本文件的編碼。這個通常取決於你的編輯器,而且有的編輯器支持多種編碼的話,你可以在文本開頭位置指定編輯器使用特定編碼。比如# -*- coding: utf8 -*-,vim看到這行會默認將這個腳本認定為utf-8兼容編碼格式。

  4. 應用程序的內部編碼。一個字元串,作為數據只是一個位元組數組,但是作為字元的數組,就有一個解析方式。java和python的內部字元編碼是utf-16,python和java都支持用不同的編碼來對位元組數組進行decode來得到字元數組。

B. python3讀文件編碼錯誤怎麼辦

在python3中系統默認編碼是unicode,讀取文件經常會編碼錯誤導致報錯。


  1. 首先先確認要讀取文件的編碼,可這樣操作:

記事本打開文本文件,點擊「文件」-「另存為」查看編碼:

importcodecs
f=codecs.open(r"test.txt","r","gbk")
print(f.read())
f.close()

(示例的文件是ANSI所以使用GBK讀取)

以上就可以正確讀取想要的文件了

C. Python 源程序編碼注意事項

默認情況下,Python 源文件是 UTF-8 編碼。在此編碼下,全世界大多數語言的字元可以同時用在字元串、標識符和注釋中 — 盡管 Python 標准庫僅使用 ASCII 字元作為標識符,這只是任何可移植代碼應該遵守的約定。如果要正確的顯示所有的字元,你的編輯器必須能識別出文件是 UTF-8 編碼,並且它使用的字體能支持文件中所有的字元。
你也可以為源文件制定不同的字元編碼。為此,在 #! 行(首行)後插入至少一行特殊的注釋行來定義源文件的編碼:
# -*- coding: encoding -*-
通過此聲明,源文件中所有的東西都會被當作用 encoding 指代的 UTF-8 編碼對待。在 Python 庫參考手冊 codecs 一節中你可以找到一張可用的編碼列表。
例如,如果你的編輯器不支持 UTF-8 編碼的文件,但支持像 Windows-1252 的其他一些編碼,你可以定義:
# -*- coding: cp-1252 -*-
這樣就可以在源文件中使用 Windows-1252 字元集中的所有字元了。這個特殊的編碼注釋必須在文件中的 第一或第二 行定義。

D. Python中怎麼定義中文編碼

在程序的第一行指定中文編碼方式,並且輸入字元為unicode,然後編碼成gb18030方式,完整程序如下:
-------------------------------------
# -*- coding: gb18030 -*-
#!/usr/bin/python

cont = raw_input( u"請輸入:".encode("gb18030") )

print cont
-------------------------------------
輸入的內容也可以是中文

E. python默認的字元編碼是什麼

Python的默認編碼是ASCII格式:

  1. ASCII(American Standard Code for Information Interchange),是一種單位元組的編碼。計算機世界裡一開始只有英文,而單位元組可以表示256個不同的字元,可以表示所有的英文字元和許多的控制符號;

  2. 源代碼文件中,如果有用到非ASCII字元,則需要在文件頭部進行字元編碼的聲明,如下:#-*- coding: UTF-8 -*-

  3. 實際上Python只檢查#、coding和編碼字元串,其他的字元都是為了美觀加上的。另外,Python中可用的字元編碼有很多,並且還有許多別名,還不區分大小寫,比如UTF-8可以寫成u8。

F. python 讀取文件時能指定編碼嗎

代碼如下:

import os
import codecs
filenames=os.listdir(os.getcwd())
out=file("name.txt","w")
for filename in filenames:
out.write(filename.decode("gb2312").encode("utf-8"))
out.close()

將執行文件的當前目錄及文件名寫入到name.txt文件中,以utf-8格式保存
如果採用ANSI編碼保存,用如下代碼寫入即可:

復制代碼代碼如下:

out.write(filename)

打開文件並寫入
引用codecs模塊,對該模塊目前不了解。在此記錄下方法,有空掌握該模塊功能及用法。

復制代碼代碼如下:

import codecs
file=codecs.open("lol.txt","w","utf-8")
file.write(u"我")
file.close()

讀取ANSI編碼的文本文件和utf-8編碼的文件
讀取ANSI編碼文件
建立一個文件test.txt,文件格式用ANSI,內容為:

復制代碼代碼如下:

abc中文

用python來讀取

復制代碼代碼如下:

# coding=gbk
print open("Test.txt").read()

結果:abc中文
讀取utf-8編碼文件(無BOM)
把文件格式改成UTF-8:

復制代碼代碼如下:

結果:abc涓 枃

顯然,這里需要解碼:

復制代碼代碼如下:

# -*- coding: utf-8 -*-
import codecs
print open("Test.txt").read().decode("utf-8")

結果:abc中文
讀取utf-8編碼文件(有BOM)
某些軟體在保存一個以UTF-8編碼的文件時,默認會在文件開始的地方插入三個不可見的字元(0xEF 0xBB 0xBF,即BOM)。在有些軟體可以控制是否插入BOM。如果在有BOM的情況下,在讀取時需要自己去掉這些字元,python中的codecs mole定義了這個常量:

復制代碼代碼如下:

# -*- coding: utf-8 -*-
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")

結果:abc中文
在看下面的例子:

復制代碼代碼如下:

# -*- coding: utf-8 -*-
data = open("name_utf8.txt").read()
u=data.decode("utf-8")
print u[1:]

打開utf-8格式的文件並讀取utf-8字元串後,解碼變成unicode對象。但是會把附加的三個字元同樣進行轉換,變成一個unicode字元。該字元不能被列印。所以為了正常顯示,採用u[1:]的方式,過濾到第一個字元。
注意:在處理unicode中文字元串的時候,必須首先對它調用encode函數,轉換成其它編碼輸出。
設置python默認編碼
復制代碼代碼如下:

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
print sys.getdefaultencoding()

今天碰到了 python 編碼問題, 報錯信息如下

復制代碼代碼如下:

Traceback (most recent call last):
File "ntpath.pyc", line 108, in join
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa1 in position 36: ordinal not in range(128)

顯然是當前的編碼為ascii, 無法解析0xa1(十進制為161, 超過上限128). 進入python console後, 發現默認編碼確實是 ascii, 驗證過程為:
在python2.6中無法調用sys.setdefaultencoding()函數來修改默認編碼,因為python在啟動的時候會調用site.py文件,在這個文件中設置完默認編碼後會刪除sys的setdefaultencoding方法。不能再被調用了. 在確定sys已經導入的情況下, 可以reload sys這個模塊之後, 再 sys.setdefaultencoding('utf8')
復制代碼代碼如下:

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
print sys.getdefaultencoding()

確實有效, 根據 limodou 講解, site.py 是 python 解釋器啟動後, 默認載入的一個腳本. 如果使用 python -S 啟動的話, 將不會自動載入 site.py.
上面寫的挺啰嗦的.
==================================
如何永久地將默認編碼設置為utf-8呢? 有2種方法:
==================================
第一個方法<不推薦>: 編輯site.py, 修改setencoding()函數, 強制設置為 utf-8
第二個方法<推薦>: 增加一個名為 sitecustomize.py, 推薦存放的路徑為 site-packages 目錄下
sitecustomize.py 是在 site.py 被import 執行的, 因為 sys.setdefaultencoding() 是在 site.py 的最後刪除的, 所以, 可以在 sitecustomize.py 使用 sys.setdefaultencoding().

復制代碼代碼如下:

import sys
sys.setdefaultencoding('utf-8')

既然 sitecustomize.py 能被自動載入, 所以除了設置編碼外, 也可以設置一些其他的東西
字元串的編碼

復制代碼代碼如下:

s1='中文'

像上面那樣直接輸入的字元串是按照代碼文件的編碼來處理的,如果是unicode編碼,有以下三種方式:

復制代碼代碼如下:

1 s1 = u'中文'
2 s2 = unicode('中文','gbk')
3 s3 = s1.decode('gbk')

unicode是一個內置函數,第二個參數指示源字元串的編碼格式。
decode是任何字元串具有的方法,將字元串轉換成unicode格式,參數指示源字元串的編碼格式。
encode也是任何字元串具有的方法,將字元串轉換成參數指定的格式。

G. python 處理中文 源文件 什麼 編碼

概括、從python1.6開始就可以處理unicode字元了。
一、幾種常見的編碼格式。
1.1、ascii,用1個位元組表示。
1.2、UTF-8,用1個至三個位元組表示,表示ascii碼時只佔用1個位元組,ascii編碼是UTF-8的子集。
1.3、UTF-16,用2個位元組表示,在python中,unicode的含義就是UTF-16。
二、python源文件的編碼與解碼,我們寫的python程序從產生到執行的過程如下:
編輯器---->源代碼---->解釋器---->輸出結果
2.1、編輯器決定源代碼的編碼格式(在編輯器中設定)
2.2、也必須要解釋器知道源代碼的編碼格式(很遺憾很難從編碼的數據獲知源文件的編碼格式)
2.3、補充:在Windows下當用UltraEdit把源代碼存成UTF-8時,會在文件中記錄BOM標志(不必祥究)這樣ActivePython解釋器會自動識別源文件是UTF-8格式,但是如果用eclipse編輯源文件,雖然在編輯器中指定文件編碼為UTF-8,但是因為沒有記入BOM標志,所以必須在源文件開始處加上#coding=utf-8,用注釋來提示解釋器源文件的編碼方式挺有意思。
2.4、舉例:例如我們要向終端輸出"我是中國人"。
#coding=utf-8 告訴python解釋器用的是utf-8編碼,我用的是eclipse+pydev print "我是中國人" #源文件本身也要存成UTF-8編碼

三、編碼的轉換,兩種編碼的轉換要用UTF-16作為中轉站。
舉例:如果有一個文本文件jap.txt,裡面有內容 "私は中國人です。",編碼格式是日文編碼SHIFT_JIS,
還有一個文本文件chn.txt,內容是"中華人民共和國",編碼格式是中文編碼GB2312。
我們如何把兩個文件里的內容合並到一起並存儲到utf.txt中並且不顯示亂碼呢,可以採用把兩個文件的內容都轉成UTF-8格式,因為UTF-8里包含了中文編碼和日文編碼。
#coding=utf-8 try: JAP=open("e:/jap.txt","r") CHN=open("e:/chn.txt","r") UTF=open("e:/utf.txt","w") jap_text=JAP.readline() chn_text=CHN.readline() #先decode成UTF-16,再encode成UTF-8 jap_text_utf8=jap_text.decode("SHIFT_JIS").encode("UTF-8") #不轉成utf-8也可以 chn_text_utf8=chn_text.decode("GB2312").encode("UTF-8")#編碼方式大小寫都行utf-8也一樣 UTF.write(jap_text_utf8) UTF.write(chn_text_utf8) except IOError,e: print "open file error",e

四、Tk庫支持ascii,UTF-16,UTF-8

#coding=utf-8 from Tkinter import * try: JAP=open("e:/jap.txt","r") str1=JAP.readline() except IOError,e: print "open file error",e root=Tk() label1=Label(root,text=str1.decode("SHIFT_JIS")) #如果沒有decode則顯示亂碼 label1.grid() root.mainloop()

以上是學習python處理python編碼的基本過程

H. python3字元串都是什麼編碼

編碼

字元串是一種數據類型,但是,字元串比較特殊的是還有一個編碼問題。

因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的計算機在設計時採用8個比特(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進制11111111=十進制255),如果要表示更大的整數,就必須用更多的位元組。比如兩個位元組可以表示的最大整數是65535,4個位元組可以表示的最大整數是4294967295。

由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機里,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。

Unicode

Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。

Unicode標准也在不斷發展,但最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代操作系統和大多數編程語言都直接支持Unicode。

現在,捋一捋ASCII編碼和Unicode編碼的區別:ASCII編碼是1個位元組,而Unicode編碼通常是2個位元組。

字母A用ASCII編碼是十進制的65,二進制的01000001;

字元0用ASCII編碼是十進制的48,二進制的00110000,注意字元'0'和整數0是不同的;

漢字已經超出了ASCII編碼的范圍,用Unicode編碼是十進制的20013,二進制的01001110 00101101。

如果把ASCII編碼的A用Unicode編碼,只需要在前面補0就可以,因此,A的Unicode編碼是00000000 01000001。

新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不劃算。

所以,又出現了把Unicode編碼轉化為「可變長編碼」的UTF-8編碼。UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間:

字元

ASCII

Unicode

UTF-8

A 01000001 00000000 01000001 01000001

中 x 01001110 00101101 11100100 10111000 10101101

從上面的表格還可以發現,UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟體可以在UTF-8編碼下繼續工作。

搞清楚了ASCII、Unicode和UTF-8的關系,我們就可以總結一下現在計算機系統通用的字元編碼工作方式:

在計算機內存中,統一使用Unicode編碼,當需要保存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。

用記事本編輯的時候,從文件讀取的UTF-8字元被轉換為Unicode字元到內存里,編輯完成後,保存的時候再把Unicode轉換為UTF-8保存到文件:

瀏覽網頁的時候,伺服器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器:

所以你看到很多網頁的源碼上會有類似<meta charset="UTF-8" />的信息,表示該網頁正是用的UTF-8編碼。

Python的字元串

在最新的Python 3版本中,字元串是以Unicode編碼的,也就是說,Python的字元串支持多語言,例如:

>>> print('包含中文的str')
包含中文的str

對於單個字元的編碼,Python提供了ord()函數獲取字元的整數表示,chr()函數把編碼轉換為對應的字元:

1個中文字元經過UTF-8編碼後通常會佔用3個位元組,而1個英文字元只佔用1個位元組。

在操作字元串時,我們經常遇到str和bytes的互相轉換。為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。

Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存為UTF-8編碼。當Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行

#!/usr/bin/env python3# -*- coding: utf-8 -*-

第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。

格式化:

在Python中,採用的格式化方式和C語言是一致的,用%實現,舉例如下:

format % (...params)
>>> 'Hello, %s' % 'world''Hello, world'>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)'Hi, Michael, you have $1000000.'

%運算符就是用來格式化字元串的。在字元串內部,%s表示用字元串替換,%d表示用整數替換,%x表示16進制整數,有幾個%?佔位符,後面就跟幾個變數或者值,順序要對應好。如果只有一個%?,括弧可以省略。

格式化整數和浮點數還可以指定是否補0和整數與小數的位數:

>>> '%2d-%02d' % (3, 1)' 3-01'>>> '%.2f' % 3.1415926'3.14'

有些時候,字元串裡面的%是一個普通字元怎麼辦?這個時候就需要轉義,用%%來表示一個%:

>>> 'growth rate: %d %%' % 7'growth rate: 7 %'

I. 怎麼在Python里使用UTF-8編碼

概述

在python代碼即.py文件的頭部聲明即可

解析

py文件中的編碼

Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼范圍內的字元的時候就要使用"編碼指示"來修正一個 mole 的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明:

# -*- coding=utf-8 -*-

#coding=utf-8

# 以上兩種選其一即可

其他的編碼如:gbk、gb2312也可以;否則會出現:

SyntaxError: Non-ASCII character 'xe4' in file test.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

python中的編碼與解碼

先說一下python中的字元串類型,在python中有兩種字元串類型,分別是 str 和 unicode,他們都是basestring的派生類;

str類型是一個包含Characters represent (at least) 8-bit bytes的序列;

unicode 的每個 unit 是一個 unicode obj;

在str的文檔中有這樣的一句話:

    The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file.

也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。

拓展內容

utf-8編碼

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字元編碼,也是一種前綴碼。它可以用來表示Unicode標准中的任何字元,且其編碼中的第一個位元組仍與ASCII兼容,這使得原來處理ASCII字元的軟體無須或只須做少部分修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或發送文字的應用中,優先採用的編碼。

UTF-8使用一至六個位元組為每個字元編碼(盡管如此,2003年11月UTF-8被RFC 3629重新規范,只能使用原來Unicode定義的區域,U+0000到U+10FFFF,也就是說最多四個位元組):

1、128個US-ASCII字元只需一個位元組編碼(Unicode范圍由U+0000至U+007F)。

2、帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要兩個位元組編碼(Unicode范圍由U+0080至U+07FF)。

3、其他基本多文種平面(BMP)中的字元(這包含了大部分常用字,如大部分的漢字)使用三個位元組編碼(Unicode范圍由U+0800至U+FFFF)。

4、其他極少使用的Unicode輔助平面的字元使用四至六位元組編碼(Unicode范圍由U+10000至U+1FFFFF使用四位元組,Unicode范圍由U+200000至U+3FFFFFF使用五位元組,Unicode范圍由U+4000000至U+7FFFFFFF使用六位元組)。

對上述提及的第四種字元而言,UTF-8使用四至六個位元組來編碼似乎太耗費資源了。但UTF-8對所有常用的字元都可以用三個位元組表示,而且它的另一種選擇,UTF-16編碼,對前述的第四種字元同樣需要四個位元組來編碼,所以要決定UTF-8或UTF-16哪種編碼比較有效率,還要視所使用的字元的分布范圍而定。不過,如果使用一些傳統的壓縮系統,比如DEFLATE,則這些不同編碼系統間的的差異就變得微不足道了。若顧及傳統壓縮演算法在壓縮較短文字上的效果不大,可以考慮使用Unicode標准壓縮格式(SCSU)。

互聯網工程工作小組(IETF)要求所有互聯網協議都必須支持UTF-8編碼。互聯網郵件聯盟(IMC)建議所有電子郵件軟體都支持UTF-8編碼。

閱讀全文

與python文本文件編碼相關的資料

熱點內容
安卓機內存刪除怎麼恢復 瀏覽:329
Qt環境的編譯軟體放到linux 瀏覽:212
聯創列印系統怎麼連接伺服器 瀏覽:935
杭州行政命令 瀏覽:160
如何查找伺服器日誌 瀏覽:801
加密的鑰匙扣怎麼寫 瀏覽:579
文件夾更新不了怎麼辦 瀏覽:475
壓縮機指示燈亮是什麼原因 瀏覽:956
什麼app訂酒店半價 瀏覽:765
中老年解壓神器 瀏覽:243
訊飛語音ttsandroid 瀏覽:468
腰椎壓縮性骨折術後能坐車嗎 瀏覽:507
python類裝飾器參數 瀏覽:347
均線pdf微盤 瀏覽:791
女生喜歡玩的解壓游戲 瀏覽:442
支付寶暗號加密操作 瀏覽:134
柯潔在哪個app下圍棋 瀏覽:751
平板用什麼app看內在美 瀏覽:609
cad計算機命令 瀏覽:173
郵箱設置域名伺服器錯誤什麼意思 瀏覽:671