硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3035|回复: 6
收起左侧

[客户分享] 代码编码格式批量转换工具

[复制链接]

7

主题

14

回帖

35

积分

新手上路

积分
35
发表于 2020-2-6 12:42:27 | 显示全部楼层 |阅读模式
本帖最后由 huangjun 于 2020-11-19 22:44 编辑

V1.5:
支持直接拖拽文件、目录到程序
新增多线程转换、优化多文件转换的体验
增加更多编码支持
优化编码选择界面布局


应网友的要求做了升级,现在可以选择需要转换的文件类型跟目标编码方式了
QQ截图20200207205723.png
QQ截图20200207205754.png


**********************以下是原文*************************
打开别人的代码的时候经常会遇到编码不一致导致乱码的情况


QQ截图20200206123308.png
如果手动一个个去转换编码方式就会很麻烦,所以写了一个小工具用来批量转换
QQ截图20200206123054.png QQ截图20200206123132.png
将其他编码方式全部转换成兼容性最好的UTF-8编码
QQ截图20200206123333.png

附软件下载链接(最近在写博客,麻烦各位去博客下载吧,帮忙增加点击量)



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2020-2-6 23:50:08 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

3

主题

75

回帖

84

积分

初级会员

积分
84
发表于 2020-2-7 20:12:56 | 显示全部楼层
我写了个脚本进行编码转化。权当抛砖引玉
  1. import os
  2. import sys
  3. import codecs
  4. import chardet

  5. #将路径下面的所有文件,从原来的格式变为UTF-8的格式
  6. def list_files(path):
  7.     list_files = []
  8.     for root,dirs,files in os.walk(path):
  9.         for file in files:
  10.             file_name = os.path.join(root,file)
  11.             if(file_name.endswith('.c') or file_name.endswith('.h') or file_name.endswith('.txt')):
  12.                 list_files.append(file_name)
  13.                 print(file_name)
  14.     # print(list_files)
  15.     return list_files

  16. def convert(file, in_enc="gb18030", out_enc="utf-8-sig"):
  17.     """
  18.     该程序用于将目录下的文件从指定格式转换到指定格式,默认的是GBK转到utf-8
  19.     :param file:    文件路径
  20.     :param in_enc:  输入文件格式
  21.     :param out_enc: 输出文件格式
  22.     :return:
  23.     """
  24.     in_enc = in_enc.upper()
  25.     out_enc = out_enc.upper()
  26.     try:
  27.         print("convert [ " + file.split('\\')[-1] + " ].....From " + in_enc + " --> " + out_enc )
  28.         f = codecs.open(file, 'rb', in_enc, errors="ignore")
  29.         new_content = f.read()
  30.         codecs.open(file, 'w', out_enc).write(new_content)
  31.     except IOError as err:
  32.         print("I/O error: {0}".format(err))

  33. if __name__ == "__main__":
  34.     path = r'..\User'
  35.     path = sys.argv[1]
  36.     print(path)
  37.     list_files = list_files(path)

  38.     for fileName in list_files:
  39.         with open(fileName, "rb") as f:
  40.             data = f.read()
  41.             codeType = chardet.detect(data)['encoding']
  42.             if(codeType == None):
  43.                 continue
  44.             print(fileName+' encode is '+codeType)
  45.             if(codeType == "GB2312"):
  46.                 convert(fileName, codeType, 'utf-8')
  47.             # if(codeType == "utf-8"):
  48.             #     convert(fileName, codeType, 'utf-8-sig')
复制代码
回复

使用道具 举报

7

主题

14

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2020-2-7 21:05:46 | 显示全部楼层
eric2013 发表于 2020-2-6 23:50
谢谢楼主分享。

应网友的要求做了升级,现在可以选择需要转换的文件类型跟目标编码方式了
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
发表于 2020-3-20 10:52:38 | 显示全部楼层
若能增加有BOM、无BOM的选项那就更棒了,
很好用的工具,谢谢楼住的分享。
回复

使用道具 举报

19

主题

310

回帖

367

积分

高级会员

积分
367
发表于 2020-9-7 11:31:31 | 显示全部楼层
我之前也是用python弄了个简单的,
你这个方便加有BOM、无BOM吗?UTF-8无BOM的,MDK、SI、VS、VSCode都可以正常用
回复

使用道具 举报

7

主题

14

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2020-11-24 18:13:53 | 显示全部楼层
hpxzw_foxmai 发表于 2020-9-7 11:31
我之前也是用python弄了个简单的,
你这个方便加有BOM、无BOM吗?UTF-8无BOM的,MDK、SI、VS、VSCode都可 ...

支持UTF8无BOM
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 13:58 , Processed in 0.248916 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表