#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
为啥搞这个?
idea 设置了自动转码,
settings-> editor->fileEncodings->Transparent native-to-ascii conversion
properties文件存储的为utf-8格式.需要更改为ascii才能保证不乱码,
为啥本地存储的为utf-8? 这个我也不知道当时的缘由.
同时内容存储需要更改为ascii(/uxxx)格式内容
常规处理方式, 打开文件-> 全选copy-> 另存为-> 选择编码ANSI->覆盖->打开idea->黏贴->保存
以下程序替代的为该系列操作步骤
"""
"""
初始化:
pip install chardet==3.0.4
"""
import chardet, os, shutil


def check_utf8_file(path, _list):
    """
    检测那些文件是properties结尾,并且编码为utf-8
    :param path: 路径
    :param _list: 结果存放集合
    :return:
    """
    for one in os.listdir(path):
        file_name = path + os.sep + one
        # 排除指定目录下的文件.
        if "target,historyBak".split(",").__contains__(one):
            continue
        # 当前为文件夹则递归调用.
        elif os.path.isdir(file_name):
            check_utf8_file(file_name, _list)
        # 只针对properties结尾文件进行检测
        elif one.endswith("properties"):
            f = open(file_name, "rb")
            # 自动检测字符编码
            config = chardet.detect(f.read())
            # 编码为utf-8编码的装载到集合中.
            if config.get("encoding") == "utf-8":
                _list.append(file_name)
    return _list


def native2ascii(path):
    """
    针对utf-8文件进行替换.
    :param path:
    :return:
    """
    for file_name in check_utf8_file(path, []):
        # 执行java的命令native2ascii
        os.system("native2ascii -encoding utf-8 {} temp".format(file_name))
        # 创建备份文件夹
        history_path = os.path.dirname(file_name)+os.sep+"historyBak"
        if not os.path.exists(history_path):
            os.mkdir(history_path)
        # 原始文件备份,放丢失
        shutil.move(file_name, history_path+os.sep+os.path.basename(file_name))
        # 移动临时文件到当前文件.
        shutil.move("temp", file_name)
        print("进行文件迁移完成", file_name)


if __name__=="__main__":
    native2ascii("D:/easy/test")


posted on 2023-03-01 10:06  夜色无边000  阅读(589)  评论(0编辑  收藏  举报