使用python將GBK編碼文檔轉(zhuǎn)化為UTF編碼

使用python將GBK編碼文檔轉(zhuǎn)化為UTF編碼

文件操作說(shuō)明(python3)

這部分簡(jiǎn)單介紹接下來(lái)會(huì)用到的函數(shù)

#open操作創(chuàng)建一個(gè)file對(duì)象,參數(shù)可為r,w,r+,w+,rb
#其中r+和w+不同之處在于r+文件必須事先存在,w+不用
#使用rb參數(shù)后 .read()會(huì)以bytes方式打開(kāi)(后面會(huì)詳說(shuō)bytes)
open('file.c', 'r')

#也可以指定打開(kāi)的編碼
#但要注意rb方式是不能指定encoding方法的
content=open('file.c', 'r', encoding='utf-8')

# 這兩種read方式對(duì)于小文件沒(méi)什么區(qū)別
content.read()
content.readlines()

# write的參數(shù)必須為str類(lèi),這與默認(rèn)read()的返回類(lèi)型相同,都是unicode的
open('file.c','w').write(content+'其他')

編碼問(wèn)題

編碼問(wèn)題是一個(gè)很頭疼的問(wèn)題,在不同操作系統(tǒng),不同國(guó)家,python不同版本都會(huì)存在.

首先明白一點(diǎn),python編碼問(wèn)題是unicode和byte字符串轉(zhuǎn)化直接的問(wèn)題!
在python2中,Unicode字符串和 byte 字符串是可以混合的狸窘,系統(tǒng)試圖幫你解決一切,但這往往帶來(lái)更大的麻煩粱腻。類(lèi)似于int和fload之間的轉(zhuǎn)換,雙向轉(zhuǎn)換并不可行.

來(lái)自wiki和網(wǎng)上文檔的說(shuō)明:

Python 2 悄悄掩蓋了 byte 到 unicode 的轉(zhuǎn)換提鸟,讓程序在處理 ASCII 的時(shí)候更加簡(jiǎn)單帕翻。你付出的代價(jià)就是在處理非 ASCII 的時(shí)候?qū)?huì)失敗。

Python 3最重要的新特性之一是對(duì)字符串和二進(jìn)制數(shù)據(jù)流做了明確的區(qū)分,文本總是Unicode晕拆,由str類(lèi)型表示藐翎,二進(jìn)制數(shù)據(jù)則由bytes類(lèi)型表示.在python3中文本和二進(jìn)制數(shù)據(jù)作了更為清晰的區(qū)分,不再會(huì)對(duì)bytes字節(jié)串進(jìn)行自動(dòng)解碼实幕。文本總是Unicode吝镣,由str類(lèi)型表示,二進(jìn)制數(shù)據(jù)則由bytes類(lèi)型表示

雖然不是標(biāo)準(zhǔn)昆庇,但許多Windows程序(包括Windows記事本)在UTF-8編碼的文件的開(kāi)首加入一段字節(jié)串EF BB BF末贾。這是字節(jié)順序記號(hào)U+FEFF的UTF-8編碼結(jié)果。對(duì)于沒(méi)有預(yù)期要處理UTF-8的文本編輯器和瀏覽器會(huì)顯示成ISO-8859-1字符串???整吆。

簡(jiǎn)單來(lái)說(shuō):
Python 2 將 strings 處理為原生的 bytes 類(lèi)型拱撵,而不是 unicode,
Python 3 所有的 strings 均是 unicode 類(lèi)型表蝙。

理解了這點(diǎn)后,就可以進(jìn)行編碼轉(zhuǎn)換了,簡(jiǎn)言之就是直接decode()成Unicode,然后open()中指定編碼即可,兩句話(huà)的事
但是在python2中,需要進(jìn)行decode('GBK').encode('utf-8')一系列操作

content =open('333.c','rb',encoding='gbk').read()  #content為byte流
new_content=content.decode('gbk')   #以gbk解碼以得到Unicode,可以直接write了
open('222.c','w',encoding='utf-8').write(new_content)   #在這里編碼就行,

#或者
#采用r+或者w+的方式只能進(jìn)行一次open操作,open之后再怎么鼓搗數(shù)據(jù)
# #最后還是會(huì)以Unicode方式write,相當(dāng)于做了無(wú)用功,所以必須進(jìn)行兩次open
content =open('111.c','r',encoding='gbk').read()
content.close()
open('111.c','w',encoding='utf-8').write(content)

對(duì)文件夾內(nèi)的文件進(jìn)行批量操作

接下來(lái)就簡(jiǎn)單了,使用os.listdir()并遍歷所有文件.

如果有文件夾直接跳過(guò),只對(duì)文件進(jìn)行操作( 對(duì).tar .rar壓縮包會(huì)判斷為文件,但gbk解碼失敗會(huì)調(diào)到異常處理,所以不用擔(dān)心 )

因?yàn)橹虚g有的文件可能已經(jīng)是utf-8 編碼了,所以 try 并拋出錯(cuò)誤 except.

import os
path = 'E:\\Python\\untitled'      #文件夾目錄
files= os.listdir(path)             #得到文件夾下的所有文件名稱(chēng)
for file in files:                  #遍歷文件夾
     if not os.path.isdir(file):    #判斷是否是文件夾拴测,不是文件夾才打開(kāi)
         try:
             fGBK = open(path+'\\'+file,'r',encoding='gbk')  #嘗試打開(kāi)文件,打不開(kāi)說(shuō)明不是gbk編碼,進(jìn)入異常處理
             content = fGBK.read()  # 無(wú)異常則繼續(xù)轉(zhuǎn)換
             fGBK.close()
             fUTF = open(path + '\\' + file, 'w', encoding='utf-8')
             fUTF.write(content)
             fUTF.close()
             print(file + '已經(jīng)轉(zhuǎn)換為UTF-8')
         except:
             print(file + '不是GBK編碼')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市府蛇,隨后出現(xiàn)的幾起案子集索,更是在濱河造成了極大的恐慌,老刑警劉巖汇跨,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件务荆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡扰法,警方通過(guò)查閱死者的電腦和手機(jī)蛹含,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)塞颁,“玉大人,你說(shuō)我怎么就攤上這事§袈啵” “怎么了酷窥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)伴网。 經(jīng)常有香客問(wèn)我蓬推,道長(zhǎng),這世上最難降的妖魔是什么澡腾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任沸伏,我火速辦了婚禮,結(jié)果婚禮上动分,老公的妹妹穿的比我還像新娘毅糟。我一直安慰自己,他們只是感情好澜公,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布姆另。 她就那樣靜靜地躺著,像睡著了一般坟乾。 火紅的嫁衣襯著肌膚如雪迹辐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天甚侣,我揣著相機(jī)與錄音明吩,去河邊找鬼。 笑死殷费,一個(gè)胖子當(dāng)著我的面吹牛印荔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宗兼,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼躏鱼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了殷绍?” 一聲冷哼從身側(cè)響起染苛,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎主到,沒(méi)想到半個(gè)月后茶行,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡登钥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年畔师,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牧牢。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡看锉,死狀恐怖姿锭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伯铣,我是刑警寧澤呻此,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站腔寡,受9級(jí)特大地震影響焚鲜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜放前,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一忿磅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凭语,春花似錦葱她、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至虫几,卻和暖如春锤灿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辆脸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工但校, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啡氢。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓状囱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親倘是。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亭枷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 字符是用戶(hù)可以讀寫(xiě)的最小單位叨粘。計(jì)算機(jī)所能支持的字符組成的集合,就叫做字符集瘤睹。字符集通常以二維表的形式存在升敲。二維表的...
    劉惜有閱讀 8,113評(píng)論 2 14
  • 字符集和編碼簡(jiǎn)介 在編程中常常可以見(jiàn)到各種字符集和編碼轰传,包括ASCII,MBCS,Unicode等字符集驴党。確切的說(shuō)...
    蘭山小亭閱讀 8,490評(píng)論 0 13
  • 轉(zhuǎn)載自Python 編碼為什么那么蛋疼港庄? - Alex-金角大王的回答 - 知乎已獲得作者本人許可倔既。 前言 這篇文...
    開(kāi)子的私家地閱讀 522評(píng)論 1 0
  • 2018.11.14 星期三 晴 今天晚上,大寶回家有點(diǎn)晚攘轩。 他到家的時(shí)候叉存,他奶奶已經(jīng)把飯菜...
    李篤成媽媽閱讀 66評(píng)論 1 1
  • 改進(jìn):更加專(zhuān)業(yè)码俩。今天去幫同事查勘度帮,傷者傷的比較嚴(yán)重,在解答她們的疑問(wèn)過(guò)程中稿存,存在自己有模糊的地方笨篷,但未求證就給予傷...
    曹小薇閱讀 225評(píng)論 0 0