linux字符编码相关知识总结、file命令、iconv命令

linux字符编码相关知识总结、file命令、iconv命令

目录

Introduction

现代计算机存储文件有很多种编码方式,各个计算机系统、程序支持的编码格式不尽相同。

基本概念

字符集

  1. 字符集指字符的集合,不同的字符集支持不同的语言,ASCII字符集就只支持英文。
  2. 字符集有对应码表,用来查找字符和做编码转换等;不表示最终编码方式。

字符编码

  1. 字符编码是指将字符集和二进制数建立映射的过程。
  2. 字符集和字符编码独立,大部分字符集对应唯一的编码方式,因此字符集名称可以一定程度上代表编码方式。
  3. Unicode字符集有多种编码方式:UTF-8、UTF-32、UTF-16等。

常见的字符集和编码方式

ASCII

  1. ASCII是字符集名称,同时也是字符编码方式,因为其编码方式唯一。
  2. 编码方式:略。
  3. 美国人发明了计算机,因此ASCII只支持英文,可以表示128个字符。

ISO-8859-x系列

  1. 字符集名称,同时也是编码方式。
  2. 为欧洲人设计,由于欧洲语言复杂性,分为了ISO-8859-1、ISO-8859-2等子标准。
  3. 向下兼容ASCII,即所有ASCII字符在ISO-8895-x中不改变原有编码方式。

ANSI系列

  1. ANSI不是字符集或者字符编码方式,而是一堆字符集及其编码方式的统称,包括中国大陆GB2312、中国台湾BIG5、日本Shift JIS等。
  2. 它指定了一种字符集的规范,而不是具体的字符集。双字节,并且向下兼容ASCII。

GBxxxx系列

  1. 字符集名称,同时也是编码方式。ANSI系列之一。
  2. 为中国人设计,采用双字节编码,兼容ASCII。

GB2312

最早的汉字编码方式。

GBK

兼容GB2312,覆盖了中国台湾的BIG5字符集以及Unicode中的CJK汉字。

GB18030

兼容GBK,并且覆盖了少数名族语言,采用单字节、双字节、四字节编码方式。

Unicode系列

如前所述,各个地区、各个语言有不同的编码方式,这为交流带来了障碍。于是ISO组织和统一码联盟推出了UCS和Unicode字符集,后来整合,字符集和编码方式基本一致。此处统称Unicode,Unicode字符集包含了世界上几乎所有语言,是目前使用最多的编码方式。

Unicode码表是四字节编码的。

Unicode向下兼容ASCII字符集,但是由于Unicode编码位数较多,如果使用单一的Unicode编码(UTF-32)来对ASCII字符集中的字符编码,会显得很浪费,于是出现了通用转换格式UTF-x系列编码方式。

UTF-8

Unicode字符集的一种编码方式。最低可以使用单字节编码,很容易兼容ASCII。

UTF-16

Unicode字符集的一种编码方式。最低可以使用双字节编码。

UTF-32

标准的Unicode字符集四字节编码方式。

UTF-x系列缺点

UTF-8采用边长字节编码,占用存储空间小,但是计算机处理较为复杂、效率低下。因此一种可行的做法是存储、传输时采用UTF-8编码,而需要对文本进行处理时转为UTF-16或UTF-32等相对稳定的编码方式。

Linux下查看、修改文件编码方式

查看

使用命令:file filenames,即可查看文件的编码等信息,但是不一定准确,因为文件本身并不携带自身编码信息。

修改

使用iconv命令即可达到目的。

iconv命令的常用选项

  • -f encoding

    必选,指定源编码方式。

  • -t encoding

    必选,指定目标编码方式。

  • -o filename

    可选,指定输出文件,默认输出到标准输出。

  • -l

    可选,输出支持的编码方式。

Reference

https://dailc.github.io/2017/05/03/char_charset_charEncoding.html

https://zhuanlan.zhihu.com/p/51202412

https://juejin.im/post/5a4aeae96fb9a04512394e12

https://www.jianshu.com/p/8c2947b3ba35

相关推荐