在多系统直接传输文件经常碰到文件编码的问题.
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就可以获得文件编码:
2.转换编码
2.1 vi
使用vi也可以变更文件编码
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>文件.