zoukankan      html  css  js  c++  java
  • 文件的编码问题解决

    前言

    很多时候,我们需要在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

     
  • 相关阅读:
    Paint类的介绍
    缓存淘汰算法之LRU
    Android SurfaceView实战 打造抽奖转盘
    android中scrollTo和scrollBy的理解
    Android View.onMeasure方法的理解
    Android Context 上下文 你必须知道的一切
    Android Animation简述
    Markdown 语法说明
    理解Java虚拟机体系结构
    Java集合框架:HashMap
  • 原文地址:https://www.cnblogs.com/lidabo/p/15527647.html
Copyright © 2011-2022 走看看