• 文件的编码问题解决


    前言

    很多时候,我们需要在linux(ubuntu,centos等)、mac和windows之间共享一些文件,但是因为各个平台自带支持的编码不一致,有的是GB2312(window默认),有的是utf-8。导致跨平台无法正确打开文件,比如windows下的GB2312编码文件放到mac下,如果mac没有安装GB2312解码器,那打开就乱码。这里总结了文件格式的相互转换,目标当然是全球统一的utf-8,utf-16等utf系列编码。

    查看文件编码工具安装

    windows 文件编码格式查看和转换

    windows平台可以通过notepad ++ 查看文件的编码,同时也可以保存为指定编码的问题文件,比如下图,查看是ANSI格式编码。
    在这里插入图片描述
    转换时,只需要选择对应的编码格式,下方可以转为utf-8或其他编码,如下图:
    在这里插入图片描述

    linux(ubuntu/centos)&mac等文件编码格式安装

    apt-get install enca   # ubuntu
    brew install enca      # mac
    yum install enca      # centos

    查看文件编码

    # 查看指定文件的编码格式
    enca -L zh_CN filename    # 或者
    enca filename
    
    # 查看当前目录下所有文件的编码
    enca `ls`   # 引号为tab键上方的字符

    如下图查看当前文件的字符编码,有GB2312,有7个二进制编码的文件(一行对应一个文件)。
    在这里插入图片描述
    文件中出现了部分文件是 7bit ASCII characters的文件,这是因为整个文件中没有中文字符,所以就这样显示,如果你写两个中文字符到文件中,你会神奇的发现编码格式显示为utf-8。

    转换编码

    # 转换指定文件到utf-8
    enca -L zh_CN -x UTF-8 filename   //或
    enca -x UTF-8 filename
    
    # 转换当前目录下所有文件到utf-8
    enca -L zh_CN -x utf-8 *   # 或
    enca -x utf-8 *

    转换格式后查看结果如下:
    在这里插入图片描述

    多层目录文件格式转换

    从mayue_web的博客中看到了一个shell脚本转换文件格式的,这里也一并贴出来,供大家参考。

    cli="find . -type f ( "
    for arg in ${@:1:$#-1}
    do
    	cli="$cli -iname *.$arg -o "
    done
    cli="$cli -iname *.${@: -1} )"
    #echo $cli
    PRE_IFS=$IFS
    IFS=$'
    '
    for i in `eval $cli`
    do
    	enca -x utf-8 $i
    done
    IFS=$PRE_IFS
    echo "ok!"

    其实作为一个开发人员,完成可以写个如python的脚本,来遍历多层子文件,python脚本如下:

    import os
    import sys
    def recursive_visitor(file_dir):
        for filename in os.listdir(file_dir):
    
            # filter some file
            if filename.startswith('.'):
                continue
    
            # only convert py file to utf-8
            file_path = os.path.join(file_dir, filename)
            if os.path.isfile(file_path) and filename.endswith('.py'):
                cmd_str = "enca -x UTF-8 %s" % file_path
                ret = os.system(cmd_str)
                if ret:
                    print("-- convert file to utf-8 failed, please check the file: {} ----".format(file_path))
                    sys.exit(1)
    
            if os.path.isdir(file_path):
                recursive_visitor(file_path)

    参考文献

    https://blog.csdn.net/mayue_web/article/details/89382470
    https://blog.csdn.net/mayue_web/article/details/89384982

     
  • 相关阅读:
    ASP.Net请求小周期
    创建型设计模式
    eml文件解析实例,简历信息抓取工具
    Microsoft ReportViewer 控件类型版本兼容问题及解决方法
    WCF IIS 部署错误处理
    如何使Wpf浏览器应用程序被完全信任运行
    Server 2008 r2 多用户远程桌面配置
    The configuration section 'system.serviceModel' cannot be read because it is missing a section decla
    spss C# 二次开发 学习笔记(六)——Spss统计结果的输出
    spss C# 二次开发 学习笔记(二)——Spss以及统计术语解释(IT人眼中的统计术语)
  • 原文地址:https://www.cnblogs.com/lidabo/p/15527647.html
Copyright © 2020-2023  润新知