xiaobaoqiu Blog

Think More, Code Less

Linux文件编码

在多系统直接传输文件经常碰到文件编码的问题.

1.查看编码

查看文件的编码有很多种方式

1.1 file

file命令输出了文件的格式和编码.

1
2
xiaobaoqiu@xiaobaoqiu:~/octopress$ file _config.yml
_config.yml: UTF-8 Unicode text

1.2 vi

vi打开文件之后,输入:set fileencoding就可以获得文件编码:

1
fileencoding=utf-8

2.转换编码

2.1 vi

使用vi也可以变更文件编码

1
:set fileencoding=utf8

2.2 iconv

使用iconv命令,iconv几个主要参数(man):

1
2
3
4
5
6
7
8
9
10
11
12
输入/输出格式规范:
-f, --from-code=名称 原始文本编码
-t, --to-code=名称 输出编码

信息:
-l, --list 列举所有已知的字符集

输出控制:
-c 从输出中忽略无效的字符
-o, --output=FILE 输出到文件
-s, --silent 关闭警告
--verbose 打印进度信息

使用例子,文件infile从GB18030编码转换至UTF-8编码并写入到文件outfile中:

1
2
3
4
5
xiaobaoqiu@xiaobaoqiu:~/temp$ cat infile 
���
xiaobaoqiu@xiaobaoqiu:~/temp$ iconv -f GB18030 -t utf-8 infile -o outfile
xiaobaoqiu@xiaobaoqiu:~/temp$ cat outfile 
测试

也可以从管道输入,比如直接访问www.google.com.hk,不出意外会是乱码(使用的big5中文编码),可以转换成utf8

1
xiaobaoqiu@xiaobaoqiu:~/temp$ curl -l 'www.google.com.hk' | iconv -f big5 -t gbk

iconv基于GPL公开源代码,是GNU项目的一部分.目前,libiconv已经包含在C运行时刻库libc.so中。因此,Linux平台上使用iconv库函数的程序,需要包含<iconv.h>文件.