打印
[资料分享与下载]

linux 文件编码格式转换

[复制链接]
1410|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
niuyaliang|  楼主 | 2015-2-28 18:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
niuyaliang|  楼主 | 2015-2-28 18:37 | 只看该作者
查看文件编码
在Linux中查看文件编码可以通过以下几种方式:
1.在Vim中可以直接查看文件编码
:set fileencoding
即可显示文件编码格式。

使用特权

评论回复
板凳
niuyaliang|  楼主 | 2015-2-28 18:37 | 只看该作者
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
~/.vimrc 文件中添加以下内容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。

使用特权

评论回复
地板
niuyaliang|  楼主 | 2015-2-28 18:37 | 只看该作者
文件编码转换
1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
:set fileencoding=utf-8(我试了不ok不知道哪的原因)

使用特权

评论回复
5
niuyaliang|  楼主 | 2015-2-28 18:37 | 只看该作者
2. iconv 转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如将一个UTF-8 编码的文件转换成GBK编码
iconv -f GBK -t UTF-8 file1 -o file2
Linux对一个3G的文本进行编码转换全过程
本过程中涉及到的Linux的命令有:split, iconv, cat

使用特权

评论回复
6
niuyaliang|  楼主 | 2015-2-28 18:37 | 只看该作者
问题:有一个3G的文本a.txt,编码格式为gbk,现在需要对其进行转换成为utf-8。
难点:iconv的转换是在内存中进行的,因此3G大小的文本,无法进行直接转换。
思路:先利用split进行文件切分,然后对每一个字文件进行ivonv转换,最后进行cat合并。

使用特权

评论回复
7
niuyaliang|  楼主 | 2015-2-28 18:38 | 只看该作者
1) ll -h a.txt 查看文件的大小,2.9G

使用特权

评论回复
8
niuyaliang|  楼主 | 2015-2-28 18:38 | 只看该作者
2) wc -l a.txt 查看文件的行数,9千200万行

使用特权

评论回复
9
niuyaliang|  楼主 | 2015-2-28 18:38 | 只看该作者
3) split -l 20000000 a.txt chunk 按照每个文件2千万行进行切割,共分成5个文件

使用特权

评论回复
10
niuyaliang|  楼主 | 2015-2-28 18:38 | 只看该作者
4) 进行转换
iconv -f gbk -t utf-8 chunka > chunka_utf8 -c
iconv -f gbk -t utf-8 chunkb > chunkb_utf8 -c
iconv -f gbk -t utf-8 chunkc > chunkc_utf8 -c
iconv -f gbk -t utf-8 chunkd > chunkd_utf8 -c
iconv -f gbk -t utf-8 chunke > chunke_utf8 -c

使用特权

评论回复
11
niuyaliang|  楼主 | 2015-2-28 18:38 | 只看该作者
5) rm chunka chunkb chunkc chunkd chunke 删除原文件

使用特权

评论回复
12
niuyaliang|  楼主 | 2015-2-28 18:38 | 只看该作者
6) cat chunk* > a.txt_utf8 进行合并

使用特权

评论回复
13
niuyaliang|  楼主 | 2015-2-28 18:38 | 只看该作者
二、
批量文件编码转换
本操作有风险,请注意操作前备份文件。

使用特权

评论回复
14
niuyaliang|  楼主 | 2015-2-28 18:39 | 只看该作者
1.将原来所有编码为gb2312的*.java文件转换为编码为utf-8的*.java.new文件
for i in `find . -name "*.java"`; do iconv -f gb2312 -t utf-8 $i -o $i.new; done

使用特权

评论回复
15
niuyaliang|  楼主 | 2015-2-28 18:39 | 只看该作者
2.将*.java.new文件的.new扩展名去除
find . -name "*.new" | sed 's/.∗.new$/mv "&" "\1"/' | sh

使用特权

评论回复
16
niuyaliang|  楼主 | 2015-2-28 18:39 | 只看该作者
三、
linux下有许多方便的小工具来转换编码,
文本内容转换   iconv
文件名转换     convmv
mp3标签转换    python-mutagen

使用特权

评论回复
17
niuyaliang|  楼主 | 2015-2-28 18:39 | 只看该作者
四、
用法: iconv [选项...] [文件...]
转换给定文件的编码。

使用特权

评论回复
18
niuyaliang|  楼主 | 2015-2-28 18:39 | 只看该作者
输入/输出格式规范:
-f, --from-co
de=名称      原始文本编码
-t, --to-code=名称         输出编码
信息:
-l, --list                     列举所有已知的字符集

使用特权

评论回复
19
niuyaliang|  楼主 | 2015-2-28 18:40 | 只看该作者
输出控制:
-c                             从输出中忽略无效的字符
-o, --output=FILE    输出文件
-s, --silent               关闭警告
--verbose            打印进度信息
-?, --help                 给出该系统求助列表
--usage               给出简要的用法信息
-V, --version            打印程序版本号

使用特权

评论回复
20
niuyaliang|  楼主 | 2015-2-28 18:40 | 只看该作者
五、
find default -type d -exec mkdir -p utf/{} \;
find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} \;
这两行命令将default目录下的文件由GBK编码转换为UTF-8编码,目录结构不变,转码后的文件保存在utf/default目录下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝