zoukankan      html  css  js  c++  java
  • Linux下windows中文文本文件乱码问题

    table of content:

    1. 乱码问题
    2. 用gedit选择正确的字符编码打开文件
    3. 文件转码
    4. 总结

    §乱码

    Fedora安装时默认用UTF-8字符编码方式, 这么做有国际化的好处(和很多用utf-8的地方兼容), 但是也有兼容问题. 比如:

    中文编码在windows下不是utf-8编码, 因为政策要求, 在中国销售的软件要用国标码 (即GBK, GB2312, GB18030(最新的))

    所以中文windows用GB18030的编码, 这就导致一个小问题. 在linux下打开windows的文件出现乱码, 如图

    用Gedit打开一个GB18030编码的文件 (双击打开时)

    为什么会这样, 因为gedit用解码utf-8的方式编码(decode) 用GB18030编码的文本, 就像用解释英语解释一段法语一样,翻译出一堆没意义的句子.

    §以正确字符编码(character encodings)打开

    解决乱码的方法很简单, gedit本身支持很多种字符编码, 如图

    1. 用gedit的打开Open打开文件,

    选择其它文件(other documents...)   

    2.

    (左下角的Character encoding 处选择正确的字符编码)

    然后,文件就正常打开啦:

    (请忽略文本内容, 只是刚好是这个文件而已, 不是给网站打广告......)

    此外, 如果用命令行的方式打开一个文件可以用gedit --encoding 相应编码 的方式来打开

    §转码

    用gedit打开一个文件

    (此文件用gb2312编码)

    另存为 saveas 此时在左下角选择utf-16的编码,点击save

    此时新文件就是utf-16格式的, 在终端用file命令可以看到文件的新编码

    $ file 用utf-16保存的新文本.txt 
    用utf-16保存的新文本.txt: Little-endian UTF-16 Unicode text, with CRLF, CR line terminators

    也有其它工具用来转码, 将gb18030转为utf-8, 比如 iconv

    用法: iconv [options] [-f from-encoding] [-t to-encoding] [inputfile]...

    $ file win_gb2312.txt 
        win_gb2312.txt: ISO-8859 text, with CRLF line terminators
    $ iconv -f gb2312 -t utf-8 win_gb2312.txt  -o utf_encoding.txt  # (-o选项指定输出文件)
    $ file utf_encoding.txt 
        utf_encoding.txt: UTF-8 Unicode text, with CRLF line terminators

    §总结

    这些方法都有不可忽视的缺点: 那就是你要提前知道文件的原编码方式是啥, 不然就要一个一个试.

    如何查看一个文件的编码方式, 可以用file命令查看, 但是file命令不可靠, 一个gb2312编码的文件file命令判断为ISO-8859...

    所以还是不够"智能"啊..这些软件...

  • 相关阅读:
    菜鸟打印模板
    centos8安装nginx1.9.1
    centos8安装tomcat8.5
    构建微信公众号服务实例和小程序服务实例
    wxMpMenuService.menuGet()和wxMpMenuService.getSelfMenuInfo()返回值对比
    spring cloud 实现基于Nacos权重的负载均衡
    go开发环境搭建
    国内公共的DNS服务&Centos7 配置公共DNS服务
    Redis
    Spring Boot 集成 PageHelper
  • 原文地址:https://www.cnblogs.com/longwaytogo/p/6308703.html
Copyright © 2011-2022 走看看