zoukankan      html  css  js  c++  java
  • 转码问题

    ---恢复内容开始---

    有四五天没写博客了,实在没内容写了,最近在写一个sgml东东,转码问题让我很是头疼!!!整理了一下所有转码方法,虽然最后也没成功吧,可能是系统设置的问题!

    方法1

    enca用法如下:

    enca -L zh_CN file 检查文件的编码

    enca -L zh_CN -x UTF-8 file 将文件编码转换为"UTF-8"编码

    enca -L zh_CN -x UTF-8 file1 file2 如果不想覆盖原文件可以这样

    除了有检查文件编码的功能以外,”enca”还有一个好处就是如果文件本来就是你要转换的那种编码,它不会报错,还是会print出结果来, 而”iconv”则会报错。这对于脚本编写是比较方便的事情。

    转换单个文件的编码

    enca -L none -x utf-8  index.html

    方法2

    通过iconv这个命令,通过file  -i  filename 或 则 file  filename  检查文件的编码

    iconv  -f 原编码 -t 目的编码 文件名   转碼后会把文件内容输入到终端

    iconv  -f 原编码 -o 目的编码 文件名  不会把转碼的内容输入到终端,

    方法3

    递归转换(包括子文件夹)
    find default -type d -exec mkdir -p utf/{} ;
    find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} ;

    这两行命令将default目录下的文件由GBK编码转换为UTF-8编码,目录结构不变,转码后的文件保存在utf/default目录下。

    注意:如果原来就是utf-8编码,使用iconv -f GBK -t UTF-8命令转换后,会出现乱码,或截断等各种问题;
    一定要保证原文件是不是utf-8编码;


    使用如下命令把文件编码先查出来:
    find default -type f -exec file -i {} ; > /tmp/a
    查询是否存在已经是utf-8编码的文件:
    grep "charset=utf-8" /tmp/a

    方法4

    比如一下文件起名叫做encondoinU2G.pl

    # convert all sgml files from UTF8 to GBK
    
    use strict;
    use autodie;
    use File::Copy;
    use encoding "utf8";
    use encoding  "gbk";
    
    my $sourceDir = "源文件路径1";
    my $targetDir = "相对于源文件目录下一个存放转码后的路径";
    
    
    sub process
    {
        (my $sourceFile,my $targetFile)=@_;
        #print STDERR  "$sourceFile
    ";
        if (-d $sourceFile){
            mkdir $targetFile unless (-d $targetFile);
            my $handle;
            if (opendir($handle, $sourceFile)) {
                while (my $subpath = readdir($handle)) {
                     if (!($subpath =~ m/^.$/) and !($subpath =~ m/
    ^(..)$/)) {
                         my $sourceF = $sourceFile."/$subpath";
                         my $targetF = $targetFile."/$subpath";
                         process($sourceF,$targetF);
                     }
                }
            }
            closedir($handle);
        }elsif($sourceFile =~ /.sgml$/){
            open(FIN, "<:encoding(utf8)",$sourceFile);# or die $!;
            open(FOUT, ">:encoding(gbk)",$targetFile);# or die $!;
            while(<FIN>) {
                print FOUT $_;
            }
            close(FIN);
            close(FOUT);
        }else{
            copy $sourceFile,$targetFile ;
        }
    }
    
    process $sourceDir,$targetDir ;

     执行perl encondoinU2G.pl

    这个脚本可以批量转码,而且扩展性也很強!

    ---恢复内容结束---

  • 相关阅读:
    2019重新起航:搭建个人博客
    Alibaba Nacos:搭建Nacos平台
    ELK:使用docker搭建elk平台
    SpringBoot:关于默认连接池Hikari的源码剖析
    git常用命名:自用,持续更新
    linux常用命名汇总:自用,持续更新
    升级项目版本:SpringBoot1.5.x到SpringBoot2.0.x
    Python学习第十五课——类的基本思想(实例化对象,类对象)
    Python学习第十三课——re(正则表达式)模块
    Python学习第十四课——面向对象基本思想part1
  • 原文地址:https://www.cnblogs.com/codeblock/p/4707220.html
Copyright © 2011-2022 走看看