大文件编码转换有什么工具?

2016-05-29 23:31:21 +08:00
 Loki2015

用 enconv 处理一个几十个 G 的文件从 GB 转 UTF8 时出错,有什么其他比较不错的办法么?

哦 当然我还知道用 UE ,有其他更适合的推荐么?

5544 次点击
所在节点    Linux
20 条回复
cxbig
2016-05-29 23:35:55 +08:00
没实际操作过,可以考虑按行分割文件,处理以后再合并。
xupefei
2016-05-29 23:41:20 +08:00
自己写个程序,按行读取,按行写入新文件。
Loki2015
2016-05-29 23:43:01 +08:00
对 这也是个办法, 谢谢
Loki2015
2016-05-29 23:43:52 +08:00
@xupefei 这种程序网上多得是 我并不觉得会写的更好
SoloCompany
2016-05-29 23:55:36 +08:00
不是 iconv 么?
Loki2015
2016-05-30 00:00:29 +08:00
iconv,enca(enconv 会根据当前系统编码猜测要转换的目标编码,省去了-x 选项),convmv
之前找到的主流的几种吧 还有一些用 py 处理的
Loki2015
2016-05-30 01:46:24 +08:00
问题原因找到了, enca(也可以说是 iconv) 处理文件时如果遇到跟预期编码不同的字符串就会报异常,
enca: Iconv conversion error on `/tmp/encaWaQKSu': Illegal byte sequence

我的文件里包含英文、汉字、阿拉伯文、可能还有其他语言字符。当然中文是最多的,而且是 Win 下输出的文件,所以很多程序默认识别的编码都是 GB2312

这导致程序按照 GBK 处理转换 UTF8 时出现该错误,因为它发现了不符合 GBK 编码的字符串。

最后还是用 UE 打开了接近 100G 的文件,完美转换到 UTF8 ,花了大概几十分钟。
fengyqf
2016-05-30 07:37:49 +08:00
iconv 加 -c 参数
clino
2016-05-30 08:43:29 +08:00
用 python 写几行代码,读文件一行行转,估计比 Ultraedit 快
ue 指的是 ultraedit 没错吧?
timeback
2016-05-30 09:59:32 +08:00
@clino 同意啊,用 python 写几行就搞定了哒。
likuku
2016-05-30 10:03:32 +08:00
最近收到同事在 windows 下直接生成的 .txt 文件,已经是 GB18030 编码了...
SpicyCat
2016-05-30 10:10:15 +08:00
楼主,就是说你的文件是混合编码?
SpicyCat
2016-05-30 10:10:42 +08:00
@timeback
@clino
混合编码的话, python 也能处理吗?
ashfinal
2016-05-30 10:22:53 +08:00
iconv ?
clino
2016-05-30 10:41:46 +08:00
@SpicyCat 混合编码的话,就写一个数组一个个试了,比如我以前写过的
codecs_list = [
"gbk",
"gb18030",
"gb2312",
"utf8",
"utf16"
]
一个个试,如果成功就返回,如果有异常就继续试
当然这种方法可能会有错误的情况发生,不过绝大部分情况是可以的
murmur
2016-05-30 11:36:26 +08:00
比起为什么出错 我想知道是什么奇葩设计把几十个 gb 编码不同的文本存储在一个文件里
likuku
2016-05-30 20:11:52 +08:00
@clino 这样也不见得行啊...也可能一行里混合几种编码(我就遇到过,试了很多办法,无解,放弃了).

或许要逐字符进行编码判断转换,但这效率... python 是有第三方作的 编码判断模块...也就那样了。
clino
2016-05-30 20:37:40 +08:00
@likuku 一行里混合几种编码这么 BT 那你还是放弃了吧 话说为什么有这种奇葩的情况呢...
likuku
2016-05-30 23:27:39 +08:00
@clino 那是个邮件相关信息的原始数据,而邮件可能千奇百怪的编码,得到的信息就可能一行记录信息混合多种编码。
clino
2016-05-31 07:30:40 +08:00
@likuku 不理解,邮件里用什么编码都有标清楚的吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/282105

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX