zoukankan      html  css  js  c++  java
  • 批量文件编码格式转化

    前言

      前段时间帮别人调试程序,在windows下能正常显示的输出,在linux下输出的全是乱码?后来发现windows默认的文件编码而是GB2312,而linux下的文件默认是utf-8,所以导致了这个问题。另一个问题就是用source insight看源码的问题,对windows下的文本文件都能看的中文源码注释,在si中居然是乱码,后来发现si居然不支持utf-8,一个这么通用的utf-8它居然不支持,这真是让si这个看代码神奇大打折扣了。今天遇到个问题就是如果我用si编写中午注释,然后将源文件上传到github上,可github上确显示的是乱码,即使调整网页的编码也不能解决,也就是说github上默认的网页编码格式是utf-8,而si中文件的编码格式是gb2312。

    解决

      在网上看了下,有人给si写了个插件,能看utf-8格式的文件,结果我试了确不是,不知道是不是我的配置有问题。另外就是将utf-8格式的文件转换为gb2312格式的文件,这个在linux中有现成的工具,那就是iconv,使用方法如下:

    iconv -f gb18030 -t utf-8 file1.txt -o file2.txt

      -f表示待转文件的源编码格式,-t表示待转文件的目标编码格式,file1.txt表示待转文件路径,-o指定目标文件路径。可以看出,这个工具使用起来很简单,不过就是不能成批的转换一个目录中的所有文件,所以我就在这个基础之上用shell脚本写了个成批转某个目录中的所有文件的编码格式,这个工具的使用语法和iconv差不多,具体如下:

    myiconv -f gb18030 -t utf-8 test/

      这个工具只需要指定需要转换的目标路径(最好是绝对路径)就可以了。工具只能将源代码文件,如.c,.h,.cpp,.cc文件的格式进行转换,如果要支持更多的文件类型,可以直接自己修改。源码链接地址:https://github.com/cc1989/my_shell.git,主要代码如下:

    foreachd()
    {
        for file in $1/*    
        do
            if [ -d "$file" ]
            then 
                echo "进入$file"
                foreachd "$file"
            elif [ -f "$file" ]
            then
                #过滤掉一些不需要转换的文件
                #want_file="`echo $file | sed -n "/.*.(tar|gz|z|bz2|gzip|so|o|a|pdf|lo|sln)$/p"`"
                #只对源文件进行修改
                want_file="`echo $file | sed -n "/.*.(c|cc|cpp|h|cxx)$/p"`"
                #echo $want_file
                if [ $want_file ]
                then
                    echo "转换$file"
                    iconv -f $source_type -t $dest_type $file -o $file.b
                    if [ $? -eq 0 ]
                    then
                        rm "$file"
                        mv "$file.b" "$file"
                    else
                        echo "$file转换失败"
                    fi
                fi
            fi
        done
    }

    测试

  • 相关阅读:
    微服务框架核心问题
    django restframework 全局异常处理,编写自定义custom_exception_handler
    django 异常处理中间件
    drf_yasg2 定制swagger
    redis-django
    django 权限
    django restframework 多对多的批量修改,基于逻辑删
    python3 动态绑定
    Django restframework 逻辑删除
    django restframework 多对多模型
  • 原文地址:https://www.cnblogs.com/chengxuyuancc/p/3735394.html
Copyright © 2011-2022 走看看