利用 Python 来实现编码转换

 指定文件编码转换

import chardet
import codecs

'''
输入文件路径, 打印出文件类型
example print(readFileType('./stm32f10x_conf.h'))
'''

def readFileType(filePath):
    with open(filePath, 'rb') as f:
        data = f.read()
        print(data)
        return chardet.detect(data)['encoding']

def fileEncoding(filePath, fileCoder, transCoding):
    data = ''
    with codecs.open(filename = filePath, mode = 'r', encoding = fileCoder) as fi:  
        data = fi.read()
    # write() 遇到 \n 会变成 \r\n 但我们这里之前已经是 \r\n 了 所以1次 write()之后变成 \r\r\n
    # 故先将先前的 \r 去掉 
    data = data.replace('\r', '')
    with open(filePath, mode = 'w', encoding = transCoding) as fo:
        fo.write(data)
        
# 转换目标编码
transCoding = 'utf-8'

while 1:
    # 用户输入文件路径
    filePath = input("转 UTF-8 编码文件路径(Q退出):").strip().replace('"', '')
    if((len(filePath) != 0)):
        if(filePath == 'Q' or filePath == 'q'):
            exit()        
        # 调用转换 查看原文件编码
        encodeIn = readFileType(filePath)

        # 调用转换 Function 转换文件
        fileEncoding(filePath, encodeIn, transCoding)

        # 调用转换 查看转换后文件编码
        encodeOut = readFileType(filePath)
        print(encodeIn, "转:", encodeOut, "完成!")
    

文件夹下指定后缀文件编码转换 

import os
import chardet
import codecs

def readFileType(filePath):
    with open(filePath, 'rb') as f:
        data = f.read()
        return chardet.detect(data)['encoding']

def fileEncoding(filePath, fileCoder, transCoding):
    data = ''
    with codecs.open(filename = filePath, mode = 'r', encoding = fileCoder) as fi:  
        data = fi.read()
    # write() 遇到 \n 会变成 \r\n 但我们这里之前已经是 \r\n 了 所以1次 write()之后变成 \r\r\n
    # 故先将先前的 \r 去掉 
    data = data.replace('\r', '')
    with open(filePath, mode = 'w', encoding = transCoding) as fo:
        fo.write(data)



# 转换目标编码
transCoding = 'utf-8'   

# 读取当前文件的父目录
dirPath = os.path.dirname(__file__)
# 读取当前文件夹所有 文件名
filesPath = os.listdir(dirPath)

# 筛选出 'xx.c' 和 'xx.h' 文件名
newFilesPath = []
for filePath in filesPath:
    if filePath.endswith('.c') or filePath.endswith('.h'):
        newFilesPath.append(filePath)

# 为 .c 和 .h 文件添加完整路径
newFilesPath = [os.path.join(dirPath, filePath) for filePath in newFilesPath]

for filePath in newFilesPath:
    # 调用转换 查看原文件编码
    encodeIn = readFileType(filePath)

    # 调用转换 Function 转换文件
    fileEncoding(filePath, encodeIn, transCoding)

    # 调用转换 查看转换后文件编码
    encodeOut = readFileType(filePath)
    print(filePath, encodeIn, "转:", encodeOut, "完成!")

os.system('pause')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值