一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python實現(xiàn)把utf-8格式的文件轉(zhuǎn)換成gbk格式的文件

Python實現(xiàn)把utf-8格式的文件轉(zhuǎn)換成gbk格式的文件

2020-05-20 09:32腳本之家 Python

這篇文章主要介紹了Python實現(xiàn)把utf-8格式的文件轉(zhuǎn)換成gbk格式的文件,本文給出了實現(xiàn)代碼并同時剖析了代碼的作用,需要的朋友可以參考下

需求:將utf-8格式的文件轉(zhuǎn)換成gbk格式的文件

實現(xiàn)代碼如下:

 

復(fù)制代碼 代碼如下:

def ReadFile(filePath,encoding="utf-8"):
    with codecs.open(filePath,"r",encoding) as f:
        return f.read()
 
def WriteFile(filePath,u,encoding="gbk"):
    with codecs.open(filePath,"w",encoding) as f:
        f.write(u)
 
def UTF8_2_GBK(src,dst):
    content = ReadFile(src,encoding="utf-8")
    WriteFile(dst,content,encoding="gbk")

 

代碼講解:

函數(shù)ReadFile的第二個參數(shù)指定以utf-8格式的編碼方式讀取文件,返回的結(jié)果content為Unicode然后,在將Unicode以gbk格式寫入文件中。

這樣就能實現(xiàn)需求。
但是,如果要轉(zhuǎn)換格式的文件中包含有一些字符并不包含在gbk字符集中的話,就會報錯,類似如下:

復(fù)制代碼 代碼如下:

UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0' in position 4813: illegal multibyte sequence


以上的報錯信息的意思是:在將Unicode編碼成gbk的時候,不能將Unicode u'\xa0'編碼成gbk。

 

這里,我們需要弄清楚gb2312、gbk和gb18030三者之間的關(guān)系

復(fù)制代碼 代碼如下:

GB2312:6763個漢字
GBK:21003個漢字
GB18030-2000:27533個漢字
GB18030-2005:70244個漢字


所以,GBK是GB2312的超集,GB18030是GBK的超集。
理清了關(guān)系之后,我們進(jìn)一步改進(jìn)下代碼:

復(fù)制代碼 代碼如下:

def UTF8_2_GBK(src,dst):
    content = ReadFile(src,encoding="utf-8")
    WriteFile(dst,content,encoding="gb18030")

 

運行后,發(fā)現(xiàn)沒有報錯,可以正常運行。

因為,在GB18030字符集中,可以找到u'\xa0'對應(yīng)的字符。
 此外,還有另外一種實現(xiàn)方案:
需要修改下WriteFile方法

復(fù)制代碼 代碼如下:

def WriteFile(filePath,u,encoding="gbk"):
    with codecs.open(filePath,"w") as f:
        f.write(u.encode(encoding,errors="ignore"))


這里,我們將Unicode編碼(encode)成gbk格式,但是注意encode函數(shù)的第二個參數(shù),我們賦值"ignore",表示在編碼的時候,忽略掉那些無法編碼的字符,解碼同理。

 

但是,當(dāng)我們執(zhí)行后,發(fā)現(xiàn)可以成功的將utf-8格式的文件修改成了ansi格式。但,另外發(fā)現(xiàn)生成的文件中,每個一行都有一行空行。

這里,可以指定以二進(jìn)制流的形式寫文件,修改后的代碼如下:

復(fù)制代碼 代碼如下:

def WriteFile(filePath,u,encoding="gbk"):
    with codecs.open(filePath,"wb") as f:
        f.write(u.encode(encoding,errors="ignore"))

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人伊人青草久久综合网破解版 | 秋霞宅宅236理论片 秋霞一级黄色片 | 欧美怡红院视频一区二区三区 | 嫩草视频在线观看免费 | 边摸边吃奶边做爽gif动态图 | 三级网站午夜三级 | 日本大片在线 | 免费一级欧美片在线观免看 | 教室里的激情电影 | 青视频在线 | 视频大全在线观看网址 | 日本最新伦中文字幕 | 99久久精品免费看国产一区 | 狠狠婷婷综合缴情亚洲 | 色播艾小青国产专区在线播放 | 99超级碰碰成人香蕉网 | 精品国产一区二区三区久 | 叛佛 作者满栀小说免费阅读 | 免费观看的毛片 | 精品视频国产 | 天美传媒果冻传媒星空传媒 | 亚欧精品在线观看 | 国产露脸对白刺激3p在线 | 国产99久久精品 | 三极片在线观看 | japan日韩xxxx69hd japanese在线观看 | 青青草精品在线观看 | 欧美va免费大片 | 久草热8精品视频在线观看 久草草在线视视频 | 免费在线电视 | 3p文两男一女办公室高h | 久久嫩草影院网站 | 久久免费特黄毛片 | 青青青青青操 | 日韩在线二区全免费 | 好大好硬好深好爽想要小雪 | 乌克兰17一18处交 | 欧美激情精品久久久久久不卡 | 国产精品男人的天堂 | 龟甲情感超市全文阅读 小说 | 成人综合婷婷国产精品久久免费 |