Linux下文本文件编码转换

在Linux下可以使用iconv工具进行文本文件的编码转换操作。
以下用示例来说明:

1, 当前系统环境变UTF-8编码时

[gbasedbt@centos7 iconv]$ echo $LANG 
en_US.UTF-8

新建的文本文件格式也为UTF-8

[gbasedbt@centos7 iconv]$ more ts_utf8.txt 
时间序列存储在容器中,容器类型似于表,时间序列的数据是连续的。容器池是一组容器的集合。
滚动窗口容器的概念,相关活动窗口、休眠窗口,分区销毁。
数据类型和系统表:
数据类型包括:CalendarPattern、Calendar、TimeSeries
系统表包括:CalendarPatterns、 CalendarTable、TSInstanceTable、TSContainerTable
[gbasedbt@centos7 iconv]$ file ts_utf8.txt 
ts_utf8.txt: UTF-8 Unicode text

注:file 命令可用于评估文本文件的类型

2, 使用iconv命令将文本文件的编码转换为gbk

[gbasedbt@centos7 iconv]$ iconv -f utf-8 -t gbk -o ts_utf8_2_gbk.txt ts_utf8.txt 

说明:
-f 表示源文件编码格式
-t 表示目标文件编码格式
-o 表示输出文件的名称

3, 转换前后的文件大小

因为utf-8编码中,汉字的编码一般为3个字节,而gbk中一般为2个字节。故会有所差别。

[gbasedbt@centos7 iconv]$ ll
total 8
-rw-rw-r-- 1 gbasedbt gbasedbt 292 Jun 18 19:59 ts_utf8_2_gbk.txt
-rw-rw-r-- 1 gbasedbt gbasedbt 388 Jun 18 19:57 ts_utf8.txt

4, 转换后的文件编码及内容显示

在Linux操作系统中,需要环境中的LANG与文本文件编码兼容才能友好显示。
如果使用的是xterm之类的终端,还需要设置终端的字符集与LANG匹配,才能友好显示。

[gbasedbt@centos7 iconv]$ echo $LANG
zh_CN.GB18030

显示文本内容,评估文本文件的类型

[gbasedbt@centos7 iconv]$ more ts_utf8_2_gbk.txt 
时间序列存储在容器中,容器类型似于表,时间序列的数据是连续的。容器池是一组容器的集合。
滚动窗口容器的概念,相关活动窗口、休眠窗口,分区销毁。
数据类型和系统表:
数据类型包括:CalendarPattern、Calendar、TimeSeries
系统表包括:CalendarPatterns、 CalendarTable、TSInstanceTable、TSContainerTable
[gbasedbt@centos7 iconv]$ file ts_utf8_2_gbk.txt 
ts_utf8_2_gbk.txt: ISO-8859 text

这里显示的文本文件类型是ISO-8859,而非UTF-8。

同样的,我们也可以将GBK转换成UTF-8格式

[gbasedbt@centos7 iconv]$ echo $LANG
zh_CN.GB18030
[gbasedbt@centos7 iconv]$ iconv -f gbk -t utf-8 -o ts_utf8_2_gbk_2_utf8.txt ts_utf8_2_gbk.txt 
[gbasedbt@centos7 iconv]$ ll
总用量 12
-rw-rw-r-- 1 gbasedbt gbasedbt 388 6月  18 20:33 ts_utf8_2_gbk_2_utf8.txt
-rw-rw-r-- 1 gbasedbt gbasedbt 292 6月  18 19:59 ts_utf8_2_gbk.txt
-rw-rw-r-- 1 gbasedbt gbasedbt 388 6月  18 19:57 ts_utf8.txt
[gbasedbt@centos7 iconv]$ file ts_utf8_2_gbk_2_utf8.txt 
ts_utf8_2_gbk_2_utf8.txt: UTF-8 Unicode text

可以注意到生成的两个UTF-8文件的编码是一致的。

你可能感兴趣的:(Linux)