1. 程式人生 > >python2.7中編碼問題以及txt檔案讀寫的注意事項

python2.7中編碼問題以及txt檔案讀寫的注意事項

首先,要清楚一點:在py檔案和python動態直譯器(命令列)中,輸入中文字串編碼是不一樣的,動態直譯器中預設編碼環境是ansi,比較麻煩(也有解決辦法),建議在py檔案中處理編碼問題。
python2.7中的字串有兩種形式:str”…”和 unicode u”\u…”

1.在py檔案中(推薦使用)

#coding:utf-8
s = "中文"
# '\xe4\xb8\xad\xe6\x96\x87' 
# 一個漢字用3個utf-8位元組碼錶示,因此s的長度是6

unis = u"中文" 
# u'\u4e2d\u6587
# 一個漢字用一個unicode表示,因此unis的長度為2

utf8s = unis.encode('utf-8'
) # '\xe4\xb8\xad\xe6\x96\x87' # unicode物件可以編碼為utf-8 uni_utf8s = utf8s.decode("utf-8") # u'\u4e2d\u6587 # 反之,utf-8格式str可以解碼為unicode

2.python動態直譯器中(不建議)

>>> s = "中文"
>>> s
'\xd6\xd0\xce\xc4' # 和py檔案中的utf-8編碼不同,可能是直譯器將str裡的中文字元編碼成了ansi,這裡有點疑惑
>>> print s
中文 # 視窗列印顯示正確
>>> 
unis = u"中文" >>> unis u'\xd6\xd0\xce\xc4' # 這裡就有問題了 >>> print unis ÖÐÎÄ # 出現了亂碼……

3.關於txt檔案的讀寫

# coding:UTF-8
# 匯入codecs包不容易出錯
import codecs
# 若open函式中的檔案路徑若有中文字元則需要使用unicode字串,否則直譯器會報錯
# 下面一個例子是,將一個utf-8編碼儲存的txt檔案開啟,修改一部分內容後儲存到一個新建的utf-8編碼txt檔案中

fread = open(u'D:\\Documents\\文獻\\老闆修改意見.txt'
,'r') # utf-8 格式的位元組碼 rows = fread.readlines() fread.close() r1 = rows[0] # txt檔案的開頭通常有表明編碼型別的位元組塊 # '\xef\xbb\xbf......'前三個位元組碼錶示該txt檔案以utf-8編碼儲存 # 解碼後為u'\ufeff......' # 使用codecs可以直接新建一個使用utf-8編碼儲存的txt檔案 fwrite_codecs = codecs.open(u'D:\\Documents\\文獻\\新建utf8.txt','a','utf-8') for row in rows: # 解碼 unicode 碼 unirow = row.decode('utf-8') # 等價於 wangls = u'王老師' wangls = u'\u738b\u8001\u5e08' # 查詢是否有'王老師',有則跳過該行 if unirow.find(wangls) > -1: continue else: # codecs 的write可以把unicode直接編碼為utf-8後寫入 fwrite_codecs.write(unirow + '\r\n') fwrite_codecs.close() print 'done' # 已有txt是utf-8編碼的情況: # 程式碼文字中的"str"中文預設為 utf-8,因此直接寫入即可 # 或者將unicode編碼成utf-8再寫入,兩者是等價的 fwrite = open(u'D:\\Documents\\文獻\\2.txt','a') s1 = "這是一行中文" s2 = u"這是一行中文".encode('utf-8') # s1 == s2 True fwrite.write(s1) fwrite.close()

總之,關於編碼的問題,最好在.py檔案中處理,並且一定要清楚txt檔案編碼型別、檔案開啟的方式(open和codecs不同,codecs是編碼可選的,讀取內容的編碼是不一樣的),一定要做到心中有數,才不會混淆。

相關推薦

python2.7編碼問題以及txt檔案注意事項

首先,要清楚一點:在py檔案和python動態直譯器(命令列)中,輸入中文字串編碼是不一樣的,動態直譯器中預設編碼環境是ansi,比較麻煩(也有解決辦法),建議在py檔案中處理編碼問題。 python2.7中的字串有兩種形式:str”…”和 unicode u

MFCTXT檔案

文字檔案的讀寫 正確的文字檔案讀寫過程 1.定義檔案變數;2.開啟指定的檔案;3.向從文字檔案中寫入資訊;4.從文字檔案中讀取資訊;5.關閉檔案 1、定義檔案變數 定義檔案變數格式:CStdioFile 檔案變數; 例如,定義一個名稱為f1的檔案變數,語句如下:

Python檔案注意編碼

檔案的讀寫操作1.python3中的預設的編碼解碼方式為utf-8 windows預設使用的編碼方式為gbk 當讀取一個windows檔案(gbk),可以指定讀取時使用的編碼encoding=('gbk')或者不需要指定 with open('a.txt','r','encoding=(gbk)') as f

Linux C學習筆記——txt檔案

  /*************** perror(s) 用來將上一個函式發生錯誤的原因輸出到標準裝置(stderr)。引數 s 所指的字串會先打印出,後面再加上錯誤原因字串。此錯誤原因依照全域性變數errno的值來決定要輸出的字串。 FILE * fopen(const c

(Android)Android TXT檔案

轉載網址:http://blog.csdn.net/wirelessqa/article/details/7807762 package com.wirelessqa.helper; import java.io.FileInputStream; import java

Python3 JSON 中文字元注意事項

一些說明 我為什麼要寫這篇文章?   最近報名了中國大學MOOC的嵩天老師的爬蟲課,頗有收穫,決定自己找個大學新聞網站練練手,果然還是碰到了臭名昭著的中文字元處理的問題,特此記錄。 這篇文章講什麼?   這篇文章講的是如何把 Python 中的 Dict

java指定編碼的按行txt檔案(幾種方式的比較)

輸入輸出的幾種形式 1.FileReader,FileWriter File r = new File("temp.txt") FileReader f = new FileReader(name);//讀取檔案name BufferedReader b = new Buf

【機器人學】機器人開源專案KDL原始碼學習:(7)examples的CMakeList.txt檔案解讀

通過學習KDL開源專案的程式碼可以學習CMake構建程式的知識,現簡單介紹一下orocos_kinematics_dynamics-master\orocos_kinematics_dynamics-master\orocos_kdl\examples\CMakeList.txt檔案的指令。

matlab常見txt檔案入的實用方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

pythontxt檔案資料,然後修改資料,再以矩陣形式儲存在檔案

import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # -*- coding: UTF-8 -*- import numpy as np import glob import tensorflow as tf flag=T

在centos 7 conda 環境和Python2.7 安裝遠程jupyter

配置 pass 準備 pen env conda 其他 nbsp 隔離 折騰了半天,為了能夠方便學習TensorFlow,搞了遠程的jupyter,方便在本地使用它,今天填了不少坑。 裝完後截圖: 下面是一些步驟: 檢查 Python 環境 CentOS 7

CentOS6.8 安裝python2.7,pip以及yum

python版本 whereis make qlite 常用 無法 adl rpm -ivh pda   由於CentOS6.8裏自帶的yum所依賴的python是2.6.66版本,但是安裝pip至少要求python是2.7版本,因而原有的2.6並不能卸載,又得安裝新的2.

Python2.7字元編碼詳解

Python2.7字元編碼詳解 Python27字元編碼詳解 宣告 一 字元編碼基礎 1 抽象字元清單ACR 2 已編碼字符集CCS 3 字元編碼格式CEF

pythonjson檔案

下面介紹json檔案的相關操作 我瞭解到Json,全名 JavaScript Object Notation,是一種輕量級的資料交換格式。Json最廣泛的應用是作為AJAX中web伺服器和客戶端的通訊的資料格式。現在也常用於http請求中,所以對json的各種學習,是自然而然的事情。

Python2.7 呼叫Windows X86 DLL檔案獲取返回報文並提取token

研究了我兩天,主要是對這個dll的資料型別不瞭解 不知道如何轉換,所以現在記下筆記。下面是調取win32介面工具的dll檔案進行對介面返回報文進行解碼並獲取token值。。。。。。 #!user/bin/python2.7 #coding:utf-8 import re import ct

2.7 檔案操作1:檔案的一般操作

匯入依賴 import ( "os" "fmt" "time" "bufio" "io" "io/ioutil" ) 開啟和關閉檔案 fun

python檔案

讀寫檔案是最常見的IO操作。Python內建了讀寫檔案的函式,用法和C是相容的。 讀寫檔案前,我們先必須瞭解一下,在磁碟上讀寫檔案的功能都是由作業系統提供的,現代作業系統不允許普通的程式直接操作磁碟,所以,讀寫檔案就是請求作業系統開啟一個檔案物件(通常稱為檔案描述符),然後,通過作業系統提供的介面從

python檔案(從file1讀出資料並計算,然後將結果寫入到file2

要求新建兩個檔案,file1、file2,要求開啟file1檔案,分別對每一行數字進行求和,並將每一行的結果寫在file2中。 file1: 20 30 40 20 52 63 52 52 85 52 8 456 522 25 36 85 96 74 程式原始碼: 定義一個求和函式

MFC檔案方法總結

CStdioFile繼承自CFile,一個CStdioFile 物件代表一個用執行時函式fopen 開啟的C 執行時流檔案。       流式檔案是被緩衝的,而且可以以文字方式(預設)或二進位制方式開啟。文字方式提供對硬回車—換行符對的特殊處理。當你將一個換行符(0x0A)寫入一個文字方式的CStdioFi

Unity下關於C#的檔案一(基於TXT的簡單)

Unity下關於C#的檔案讀寫(基於TXT和LitJson) NOTE (基本認識):其實.txt,.xml,.json這類檔案都屬於文字檔案,類似的還有.lrc歌詞檔案,.ini配置檔案,.reg登錄檔檔案等等,這類檔案所儲存的內容都是文字(即為字串),