linux语言编码转换为字符串,shell实现字符编码转换工具分享

#!/bin/bash

: << mark

转码工具,支持UTF-8转GBK和GBK转UTF-8

孔令飞@2012-05-07

mark

#set -x

scode="gbk"

dcode="utf-8"

function Usage()

{

cat << EOF

Usage: conv [OPTIONS] [DIR]

[-u] GBK to UTF-8

[-g] UTF-8 to GBK

EOF

exit 1

}

#将当前目录下所有普通文件进行转码 GBK to UTF-8

function g2u()

{

local dir=$1

printf "Convering $dir ......"

for file in $(ls $dir)

do

file="$dir/$file"

if [ -f $file ];then

coding=$(file -b $file | cut -d ' ' -f1)

#进行转码

if [ "$coding" = "ISO-8859" ];then

local tmpfile=$(mktemp)

Fright=$(stat -c %a $file)

Fuser=$(stat -c %U $file)

Fgro=$(stat -c %G $file)

iconv -f $scode -t $dcode $file > $tmpfile || Usage

mv $tmpfile $file &&

chmod $Fright $file

chown $Fuser:$Fgrp $file

fi

fi

done

printf "      done\n"

}

function u2g()

{

local dir=$1

printf "Convering $dir ......"

for file in $(ls $dir)

do

file="$dir/$file"

if [ -f $file ];then

coding=$(file -b $file |cut -d ' ' -f1)

#进行转码

if [ "$coding" = "UTF-8" ];then

local tmpfile=$(mktemp)

Fright=$(stat -c %a $file)

Fuser=$(stat -c %U $file)

Fgro=$(stat -c %G $file)

iconv -f $dcode -t $scode $file > $tmpfile || Usage

mv $tmpfile $file &&

chmod $Fright $file

chown $Fuser:$Fgrp $file

fi

fi

done

printf "      done\n"

}

[ $# -ne 2 ] && Usage

while getopts ug opt

do

case $opt in

u) echo "Convert gbk coding to utf-8 ...."

for dir in $(find $2 -type d)

do

g2u $dir

done

g) echo "Convert utf-8 coding to gbk ...."

for dir in $(find $2 -type d)

do

u2g $dir

done

*) Usage

exit 1

esac

done

exit 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值