如何用iconv批量修改文本编码?

sh/bash/dash/ksh/zsh等Shell脚本
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

如何用iconv批量修改文本编码?

#1

帖子 jioyo源 » 2009-04-04 1:27

从别人电脑拷来很多TXT文件,可都显示乱码,用iconv一个一个改太慢,如何用iconv批量修改,望知者指点。
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
hubert_star
论坛版主
帖子: 5373
注册时间: 2007-10-29 22:12
系统: OSX 10.9 + Ub 1304
来自: 江苏南京

Re: 如何用iconv批量修改文本编码?

#2

帖子 hubert_star » 2009-04-04 1:34

bash的for

看bash指南即可
佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!
圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!

我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;

特此声明!

有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

欢迎来我的新浪微博@me
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 如何用iconv批量修改文本编码?

#3

帖子 jioyo源 » 2009-04-08 0:57

:em20 还得自己来呀,哎,这年头人懒了是不行呀。
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
hellojinjie
帖子: 1150
注册时间: 2007-09-14 21:03
来自: 浙江

Re: 如何用iconv批量修改文本编码?

#4

帖子 hellojinjie » 2009-04-10 15:30

代码: 全选

for i in `find . *`; do if [ -f "$i" ]; then iconv -f gb2312 -t utf8 $i > "./converted/$i" fi ; done
Say hello to everyday!
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 如何用iconv批量修改文本编码?

#5

帖子 jioyo源 » 2009-04-11 0:16

jioyo@jioyo-laptop:~/myspace/ebook/txt$ for i in `find . *`; do if [ -f "$i" ]; then iconv -f gb2312 -t utf8 $i > "./converted/$i" fi ;done
-bash: 在未预料的“done”附近出现语法错误
好象要建converted文件夹,可是还是出现这个问题;
for i in *.txt ; do iconv -f gb2312 -t utf-8 $i > "converted/$i";done
只能转一部分,是一个文件里的一部分内容编码变了,可别的都没有了% :em20
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
daf3707
论坛版主
帖子: 12731
注册时间: 2007-06-13 15:57
来自: 在他乡

Re: 如何用iconv批量修改文本编码?

#6

帖子 daf3707 » 2009-04-11 8:27

代码: 全选

enconv *.txt
头像
hellojinjie
帖子: 1150
注册时间: 2007-09-14 21:03
来自: 浙江

Re: 如何用iconv批量修改文本编码?

#7

帖子 hellojinjie » 2009-04-11 9:25

怎么会只转一部分啊

代码: 全选

for i in *.txt; do iconv -f gb2312 -t utf-8 $i -o "iconv_$i"; done
enconv 什么命令啊 ,搜不到。。
Say hello to everyday!
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 如何用iconv批量修改文本编码?

#8

帖子 jioyo源 » 2009-04-11 10:21

daf3707 写了:

代码: 全选

enconv *.txt
谢了,学习了……
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
sevk
帖子: 2060
注册时间: 2007-05-08 16:26
系统: arch
来自: 火星内核某分子内某原子核内
联系:

Re: 如何用iconv批量修改文本编码?

#9

帖子 sevk » 2009-04-11 11:55

直接用vim打开这些文件就不会乱码.会自动识别编码的.

/etc/vim/vimrc 里加2行:

代码: 全选

 set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,iso-8859-1
 set encoding=utf-8
笔记本 :
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何用iconv批量修改文本编码?

#10

帖子 eexpress » 2009-04-11 14:41

enconv就是自动猜编码的。为什么老有人用iconv
● 鸣学
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 如何用iconv批量修改文本编码?

#11

帖子 jioyo源 » 2009-04-11 17:40

sevk 写了:直接用vim打开这些文件就不会乱码.会自动识别编码的.

/etc/vim/vimrc 里加2行:

代码: 全选

 set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,iso-8859-1
 set encoding=utf-8
:em06 这个我知道,其实主要是给别人弄,直接给别人乱码,我得转下……
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 如何用iconv批量修改文本编码?

#12

帖子 jioyo源 » 2009-04-11 17:42

hellojinjie 写了:怎么会只转一部分啊

代码: 全选

for i in *.txt; do iconv -f gb2312 -t utf-8 $i -o "iconv_$i"; done
enconv 什么命令啊 ,搜不到。。
hellojinjie 写了:怎么会只转一部分啊

代码: 全选

for i in *.txt; do iconv -f gb2312 -t utf-8 $i -o "iconv_$i"; done
enconv 什么命令啊 ,搜不到。。
for i in *.txt; do iconv -f gb2312 -t utf-8 $i -o "iconv_$i"; done这个还是不行,我20多M的txt转了后就1.7M了,
iconv: 372位置的非法输入序列
iconv: 3793位置的非法输入序列
iconv: 4975位置的非法输入序列
iconv: 23031位置的非法输入序列
iconv: 60530位置的非法输入序列
iconv: 55668位置的非法输入序列
iconv: 2903位置的非法输入序列
iconv: 11079位置的非法输入序列
iconv: 91018位置的非法输入序列
iconv: 63052位置的非法输入序列
iconv: 16995位置的非法输入序列
iconv: 1007位置的非法输入序列
iconv: 187199位置的非法输入序列
出来这一堆。
enconv 这个得安enca包。
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
hellojinjie
帖子: 1150
注册时间: 2007-09-14 21:03
来自: 浙江

Re: 如何用iconv批量修改文本编码?

#13

帖子 hellojinjie » 2009-04-11 17:57

原来还有enca 可以用来猜编码的。 :em11

上面的错误可能是-f 后的参数错误吧,也就是说原来的编码不是gb2312,,
:em23 gb18030 和 gb2312 两种编码可不可以混用的?
Say hello to everyday!
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

Re: 如何用iconv批量修改文本编码?

#14

帖子 bones7456 » 2009-04-13 12:22

转编码真是个大麻烦事啊..
关注我的blog: ε==3
yangkang5303
帖子: 91
注册时间: 2008-12-23 20:32

Re: 如何用iconv批量修改文本编码?

#15

帖子 yangkang5303 » 2009-09-19 17:00

daf3707 写了:

代码: 全选

enconv *.txt


向高手致敬!

cd 到文件夹里面 执行你那代码。结果瞬间1500多txt文本变成了utf-8!!!!
:em11
intel core 2 Duo T5250
nVIDIA geforce 8600m gt
回复