其实说到编码转换,那就不得不说到iconv这个库了,如果已经安装了这个工具,那在命令行下直接打这个命令就行了。下面就用这个工具来实现中文系统下的常用编码转换。

首先,来了解一下iconv这个命令的使用方法。命令格式如下

iconv -f 编码 -t 编码 文件名

-f 参数指所要转换文件的文件编码,当然必须事先知道文件的编码,不然不能正确转换。

-t 参数指希望转换成的文件编码,当然应该知道所指定文件的编码能不能转换成该编码,不然转换后的结果可能一无所用。比如你将中文编码转换成西欧的某种编码的话,是没有什么意义的。

文件名 就是你希望转换的文件的名称的,当然也可以包含路径了。

比如将a.txt文件用GB2312(简体)转换成BIG5(繁体),命令如下:

$iconv -f GB2312 -t BIG5 a.txt

当然也可以使用iconv -l来查看都有哪些编码可用,命令如下:

$iconv -l

那么,如果不知道文件的编码怎么办?比如我的系统中有繁体字编码的文件,也有UTF-8编码的文件,又有简体字编码的文件,但是系统说使用的编码是简体的。怎样把所有文件的编码都转换成简体字,或者怎样将所有文件的编码变成繁体字编码,或者怎样将所有的文件都转换成UTF-8编码呢?下面的这段程序将告诉你去怎样实现这个功能。

#!/bin/bash

#文件名

fname=$1

#临时文件,用来保存转换的结果

tmpfile="cc`date +%0H%0M%0S`.liu"

#没有输入文件名

if [ -z ${fname} ] ; then

echo "Bad file name. ";

exit;

fi

#输入的文件不存在

if [ ! -f ${fname} ] ; then

echo "File is not existed.FILE="${fname};

exit;

fi

################################################

# f_code:现有文件的编码,当不太清楚现有文件的编码的时候,

# 可以同时指定的几种可能的编码

# t_code:希望转换成的目标编码

################################################

#比如要将GB2312或者UTF-8的文件转换成BIG5(繁体)文件

t_code="BIG5" #目标编码

f_code="GB2312 UTF-8" #可以转换的文字编码

#判断系统文字编码是否为GB2312,是的话则将BIG5或者UTF-8编码的文件转换成系统一样

#的GB2312

echo $LANG | grep -i GB2312> /dev/null

if [ $? -eq 0 ] ; then

t_code="GB2312" #目标编码

f_code="BIG5 UTF-8" #可以转换的文字编码

fi

#判断系统文字编码是否为BIG5, 是的话则将GB2312或者UTF-8编码的文件转换成系统一样

#的GB2312

echo $LANG | grep -i BIG5 > /dev/null

if [ $? -eq 0 ] ; then

t_code="BIG5" #目标编码

f_code="GB2312 UTF-8" #可以转换的文字编码

fi

#如果要把GB2312,BIG5文字编码的文件统一转换成UTF-8,则应该这样

t_code="UTF-8" #目标编码

f_code="GB2312 BIG5" #可以转换的文字编码

#当然你也可以任意设置你需要互相转换的编码,但主意要保证编码之间可以自由转换。比如

#你要将GB2312转换成某种西欧编码,则没有什么意义了。

normal_msg=""

error_msg=""

#依次尝试从可以转换的文字编码开始对文件进行编码转换

for code in ${f_code} ; do

#文字编码转换

iconv -f $code -t $t_code ${fname} > ${tmpfile}

#转换成功,一旦转换成功则不用再尝试用其他编码来读取文件

if [ $? -eq 0 ] ; then

normal_msg="ICONV SUCCESSED! FILENAME=${fname} F_CODE=$code,T_CODE=$t_code"

break

else #转换失败

if [ ! -z "${error_msg}" ] ; then

error_msg="${error_msg} "

fi

error_msg="${error_msg}ICONV FAILED! FILENAME=${fname} F_CODE=$code,T_CODE=$t_code"

fi

done

#输出转换结果消息

#转换成功,则输出转换成功消息;所有尝试转换都失败的时候,则输出所有转换失败消息

if [ -z "${normal_msg}" ] ; then

echo -e ${error_msg}

else

cp -f ${tmpfile} $fname

echo ${normal_msg}

fi

#删除临时文件

if [ -f ${tmpfile} ] ; then

rm -f ${tmpfile};

fi

在上面的程序中,实际上只是实现了一个文件的转换,如果要实现多个文件的转换的话,该怎么办了,其实很简单了,只需要遍历一下文件就行了。遍历文件的方法很多,也就不详细解说了,下面仅举一个用find命令来查找文件并对找到的文件进行编码转换。命令很简单,如下:

$find . -type f -name ‘*.txt’ | xargs -l sh cc.sh

其中cc.sh是上面的程序文件。该命令查找当前目录下所有的后缀为txt的文件比对其进行编码转换。

在上面的程序中,为了说明方便,文件编码和转换的目标编码都是在程序里设定的,如果需要更加实用一点的话,可以把原文件的编码和转换的目标编码都作为参数来输入,这样的话,这个程序就不光是中文系统下的文件编码转换了,日文,韩文等等编码的转换也能很轻松实现了。

linux 繁体中文转为简体,Linux下对文件进行编码转换(简体→繁体,繁体→简体,简体繁体→UTF-8)...相关推荐

  1. linux常用命令:iconv 命令(用于文件的编码转换),还可以用UE另存

    https://www.cnblogs.com/shujuxiong/p/8990452.html iconv命令是linux下用于文件转编码的常用命令,对于同时使用windows系统和linux系统 ...

  2. Linux和Windows的遍历目录下所有文件的方法对比

    首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...

  3. linux redhat中文字体安装,Linux redhat中文字体安装.doc

    Linux redhat中文字体安装 Linux redhat中文字体安装 安装完linux redhat 5.4,打开浏览器发现显示中文全部成了乱码,原来在安装的时候没有选择安装中文字体支持包,打开 ...

  4. linux ll以编码格式_在Linux中文件的编码及对文件进行编码转换

    如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Li ...

  5. php文件夹转换网页,PHP转换文件夹下所有文件的编码 适合发布网站的其他编码版本...

    PHP转换文件夹下所有文件的编码 适合发布网站的其他编码版本 比如你有一个GBK版本 你想有一个UTF8版本 或者你只有GBK的源码 你想二次开发 但是你不想改变IDE的编码方式 你可以用这个程序将其 ...

  6. linux 繁体中文转为简体,中文繁简转换及其转换工具.pdf

    ·计算机教育·· 本栏目贲任编辑:主力 中文繁简转换及其转换工具 冯 霞 (北京师范大学中文信息处理研究所,北京100875) 摘要:简体中文和繁体中文是现代汉语并存的两种书面形式.它们在语音.词汇. ...

  7. linux安装中文输入法sc,Linux下安装Discuz_7.2_FULL_SC_GBK

    一.安装apache服务器 在终端下输入下方命令: sudo apt-get install apache2 安装完毕后,接下来就要启动Apache了 sudo /etc/init.d/apache2 ...

  8. linux php 中文文件名乱码,linux文件名乱码

    linux文件名乱码 在windows上使用ftp上传文件到Linux上,中文名称在Linux系统中显示为乱码.虽然将Linux的env设置了LANG=en_US.UTF-8,并且本地的Shell客户 ...

  9. linux 接收中文数据乱码,linux中文乱码问题的解决方法

    这篇文章给大家分享的是有关linux中文乱码问题的解决方法的内容.小编觉得挺实用的,因此分享给大家做个参考.一起跟随小编过来看看吧. Linux中文乱码的解决方法:比如当log4j乱码时我们可以通过找 ...

最新文章

  1. SQL中 不等于时存在null的问题
  2. 关于MySQL的各种总结
  3. 2019标杆案例复盘(上):数字化——金融政企篇
  4. 陇东学院c语言程序设计,C语言程序设计
  5. Fedora/RedHat安装Mysql8.0
  6. Ubuntu ./configure 半途终止 导致没有生成makefile文件 解决方法
  7. Project Euler 97 :Large non-Mersenne prime 非梅森大素数
  8. 照片视频拼接软件哪个好?一半图片一半视频的快速上手教程,朋友圈超吸赞效果
  9. matlab保存f黑白图片_MATLAB的矩阵运算与重构
  10. 前端程序员转行做新媒体运营?什么原因
  11. 2021年西电计算机学院软专复试问题总结
  12. Leetcode(934)——最短的桥
  13. python正则表达式match方法_Python match()函数:匹配正则表达式
  14. Ubuntu18.04下 LOAM_Velodyne 的编译安装(PCL为1.8.1)
  15. 深度学习笔记---多尺度网络结构归类总结
  16. Python中如何将浮点型数据转换成整型
  17. 共享雨伞,又一个昙花一现的共享经济?
  18. 计算机网络知识(看这篇就够啦)
  19. python count函数代码_python中count函数简单用法
  20. 雅虎通网络摄像头被黑客攻击

热门文章

  1. 基于python实现梯度下降法(GD)在线性回归中的应用(Boston房价预测数据集)
  2. 为什么你需要一台NAS(网盘云盘vs路由器硬盘vsNAS)
  3. 第3天-Jenkins详解
  4. meanshift算法
  5. hardware 中的几个地址问题
  6. YD2606A、CSC7206A
  7. QT 之 编译错误总结(2)
  8. 刺激战场android闪退,《绝地求生刺激战场》老是闪退怎么办 老是闪退解决方法介绍...
  9. JAVA-生成二维码图片
  10. 多人同步在线编辑文档onlyoffice服务器部署