国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 18:01:36
字體:
供稿:網(wǎng)友

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

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

復制代碼 代碼如下:

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字符集中的話,就會報錯,類似如下:

復制代碼 代碼如下:

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)系

復制代碼 代碼如下:

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

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

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方法

復制代碼 代碼如下:

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",表示在編碼的時候,忽略掉那些無法編碼的字符,解碼同理。

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

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

復制代碼 代碼如下:

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿拉尔市| 夏河县| 和静县| 宁南县| 新安县| 正安县| 丰台区| 景谷| 张家界市| 布拖县| 伊金霍洛旗| 西畴县| 邵武市| 永川市| 穆棱市| 泰顺县| 贞丰县| 凌源市| 唐海县| 友谊县| 睢宁县| 耿马| 竹北市| 夏河县| 襄城县| 迁安市| 三门峡市| 翁源县| 小金县| 隆尧县| 德惠市| 光山县| 绥棱县| 盘锦市| 丹江口市| 弋阳县| 鲜城| 广灵县| 建湖县| 凤翔县| 阿拉尔市|