linux上打开windows的txt文件乱码

linux上打开windows的txt文件乱码

windows上默认是使用的gbk编码格式,然而linux设置的默认utf-8编码格式

之前有一个错误的想法:认为utf-8编码既然是国际通用的编码格式,支持各个国家的语言,那么就应该向下兼容gbk编码才对啊?其实不是这样的。如题,windows上的txt在linux上打开不就是乱码了吗

utf-8确实是支持所有的语言,但是它也是一种编码格式,只有你用了相同的编码格式,才能显示正常

乱码的本质是:读取二进制的时候采用的编码和最初将字符转换成二进制时的编码不一致

其实各种编码都是独立的,并不存在兼容问题,你使用什么编码格式生成的文字,那就必须要使用这种编码格式才能正常显示。有两种方法可以正常显示

  1. 可以将编辑器设置为支持这种编码格式

    例如windows上gbk编码的txt,在utf-8编码的linux上要正常显示,可以将vim编辑器设置为支持gbk编码

    1
    vim ~/.vimrc	#修改vimrc配置文件
    1
    set fileencodings=utf-8,gb18030,gbk		#加入gbk支持
  2. 使用更加彻底的解决方法,将gbk格式转换为utf-8,这样所有的编辑器打开都能正常显示

    例如将gbk编码的1.txt转换为utf-8的2.txt

    1
    iconv -f gbk -t utf-8 1.txt -o 2.txt

iconv语法:

iconv - convert text from one character encoding to another

1
2
3
4
5
6
7
inputfile	输入文件	如果不指定输入文件,那么读取标准输入

outputfile 输入文件 如果不指定输出文件,那么写入标准输出

-f 原编码格式 如果不指定原码格式,那么默认系统编码格式

-t 转换后的编码格式 如果不指定输出编码格式,那么默认系统编码格式
1
iconv [options] [-f from-encoding] [-t to-encoding] [inputfile] [-o] [outputfile]
1
2
iconv -l	#列出所有的编码格式
iconv -c #忽略不能转化的字符