• Linux下查看txt文档


            当我们在使用Window操作系统的时候,可能使用最多的文本格式就是txt了,可是当我们将Window平台下的txt文本文档复制到Linux平台下查看时,发现原来的中文所有变成了乱码。

    没错, 引起这个结果的原因就是两个平台下,编辑器对默认的编码格式是不一样的:

    在Window平台下。Notepad的默认编码是ASCII码或者GBK,而在Linux平台下默认的是UTF-8(中文环境的情况),编码的不同导致了原来文档中的中文变成了乱码。

    解决的方法:
    使用iconv命令将文档的编码进行转换就可以。

    iconv默认情况下,是没有被安装的。以下简介下iconv的安装过程:
    1. 下载:
    http://www.gnu.org/software/libiconv/#TOCdownloading

    2. 安装:
    下载完毕后,切换到下载文件夹先进行解压:

    $tar -xzvf libiconv-1.14.tar.gz

    然后进入解压后的文件里

    $cd libiconv-1.14_2
    查看当中的README文件,我们能够看到安装步骤:(当然,假设您熟悉源代码的安装,这步全然能够省略^-^)
    $ ./configure --prefix=/usr/local
    $ make
    $ make install

    3. 命令学习
    该工具安装完毕后,肯定要先了解下这个命令的使用方法吧。这个没什么可说的:
    $iconv --help
    我们会看到以下的内容:
    Usage: iconv [OPTION...] [FILE...]
    Convert encoding of given files from one encoding to another.
    
     Input/Output format specification:
      -f, --from-code=NAME       encoding of original text
      -t, --to-code=NAME         encoding for output
    
     Information:
      -l, --list                 list all known coded character sets
    
     Output control:
      -c                         omit invalid characters from output
      -o, --output=FILE          output file
      -s, --silent               suppress warnings
          --verbose              print progress information
    
      -?

    , --help Give this help list --usage Give a short usage message -V, --version Print program version Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.

    说的非常明确,就是依照以下的格式进行转换:
    iconv -f 原编码 -t 目标编码 要转换的文件

    4. 编码转换:
    学会了编码的转化。我们就举了样例示范一下:
    $iconv -f gbk -t utf8 test.txt
    命令运行完毕后,你发现原来test.txt中的中文正常显示了。可是打开原来的文件,却发现还是乱码,这个Easy,我们将输出的内容输入到文件里就可以。


    $iconv -f gbk -t utf8 test.txt -o test
    或者运行以下的命令:
    $iconv -f gbk -t utf8 test.txt < test
    此时我们打开这个test文件就会发现,原来的中文显示正常了^-^

    注意:
    假设不出意外的话。上面的安装步骤可没有那么顺利。在make的时候,会提示以下的错误:
    n file included from progname.c:26:0:
    ./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
     _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
     ^
    make[2]: *** [progname.o] Error 1
    make[2]: Leaving directory `/home/freeman/Downloads/libiconv-1.14_2/srclib'
    make[1]: *** [all] Error 2
    make[1]: Leaving directory `/home/freeman/Downloads/libiconv-1.14_2/srclib'
    make: *** [all] Error 2
    这个这个软件本身存在的一个Bug,通过Google,发现一个解决该问题的补丁,内容例如以下:
    --- srclib/stdio.in.h.orig      2011-08-07 16:42:06.000000000 +0300
    +++ srclib/stdio.in.h   2013-01-10 15:53:03.000000000 +0200
    @@ -695,7 +695,9 @@
     /* It is very rare that the developer ever has full control of stdin,
        so any use of gets warrants an unconditional warning.  Assume it is
        always declared, since it is required by C89.  */
    -_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
    +#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
    + _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
    +#endif
     #endif
    PS:内容中的"+"表示新增的内容。"-"表示删除的内容!

    那我们仅仅要进行例如以下操作就可以解决问题:
    1. 切换到srclib文件夹下:
    $cd srclib

    2. 改动stdio.in.h文件:

    $gedit stdio.in.h
    通过搜索,定位到_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");这一行,然后在这一行的前后加上条件编译就可以,改动后的内容例如以下:

    #if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
            _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
    #endif

    3. 保存退出。然后再进行make, make install便可顺利安装^-^

    參考资料:http://forum.z27315.com/topic/15662-%E8%A7%A3%E5%86%B3%E7%BC%96%E8%AF%91libiconv%E6%97%B6%E7%9A%84gets-undeclared-here%E9%94%99%E8%AF%AF/
  • 相关阅读:
    IntelliJ IDEA 快捷键大全
    springboot整合jsp 遇到的问题
    mysql数据库中某字段一部分乱码
    Spring-boot整合Redis,遇到的问题
    遍历对象和数组的forEach函数
    获取随机数,要求长度一致的字符串格式
    获取yyyy-mm-dd格式的日期
    JS对象常用API
    数组常用API
    JS中异步和单线程
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7122605.html
Copyright © 2020-2023  润新知