我想写一个文本纠正程序,问题来了,面对各种 txt,我怎样才能智能的识别各种编码?

2016-07-10 18:12:36 +08:00
 EnginDee

我想写一个文本纠正程序,问题来了,面对各种 txt ,我怎样才能智能的识别各种编码?

我的这个程序,就是简单调整有些下载的 txt ,有些被插入大量的换行符, 我的程序,就是把这些不该有的换行符删除。 纠正常见的基本错误。 这样阅读器打开文本,排版就正常一些了。

4180 次点击
所在节点    程序员
25 条回复
EnginDee
2016-07-10 18:26:35 +08:00
我可能会使用 node js 来写。 求帮助。 Java 也行。
UnisandK
2016-07-10 18:29:58 +08:00
原理不知道,但收藏有这个功能的工具
https://beyondcow.com/textpal/
shyling
2016-07-10 18:34:50 +08:00
在 ruby 里有 valid_encoding?
node 里试试 iconv 吧
java 里用 java.nio.charset
总之就是用 Charset 按顺序一个一个试。。一定要有顺序哦
shiny
2016-07-10 18:37:13 +08:00
顺序非常重要,错了就会乱码
busyluo
2016-07-10 18:37:27 +08:00
从最严格的编码开始试,遇到不正确的内容就跳过,试下一个。 你可以参考 vim 的源码。(我没有看过 vim 源码,理论上可行)
breeswish
2016-07-10 18:43:23 +08:00
murmur
2016-07-10 18:55:51 +08:00
除了 chardet 似乎没别的方法。。。因为大家都不太喜欢 bom 头这个东西
wangxn
2016-07-10 19:03:01 +08:00
Mozilla 有个开源项目。但没办法做到 100%精确。
xuboying
2016-07-10 19:12:48 +08:00
不能识别编码,除非你上大数据,要么你让用户指定 fall back 编码
mbbill
2016-07-10 20:46:14 +08:00
@busyluo vim 是没有这个功能的
zhuangzhuang1988
2016-07-10 20:49:06 +08:00
notepad++ 的源码翻翻看..
laoyur
2016-07-10 21:31:06 +08:00
突然想起了 N 年前做 Symbian 文本阅读器的时代
智能检测 UTF-8 ( w/ w/o BOM )、 UTF-16LE/BE 、 GBK 、 Shift-JIS 、 BIG-5
EnginDee
2016-07-10 22:26:34 +08:00
@laoyur Symbian 也是我的记忆啊……现在还怀念 s60v3 ,你当初是怎么智能识别编码的?
busyluo
2016-07-10 22:53:45 +08:00
@mbbill set fileencodings 不就是?
mbbill
2016-07-11 00:36:22 +08:00
@busyluo 这是手动设置编码,并不是楼主说的智能识别
mbbill
2016-07-11 00:40:12 +08:00
@busyluo 可能我说的不是很清楚,举个例子,比如你把 cp936 和 big5 都放到 fileencodings 里面就是没有意义的。同一个码点在不同编码里面都是合法的,这就需要用统计学的方法来探测了。
Arnie97
2016-07-11 00:41:10 +08:00
怎么感觉你重造轮子了,推荐一个软件 http://www.gidot.net/typesetter/
congeec
2016-07-11 01:04:28 +08:00
vim 会像 enca, chardet 一样猜文件编码
Set fileencodings 后不跟任何内容的输出就是文件编码,加上=才是设置编码
我还经常在 UTF8 终端里用 vim 打开 GBK 编码的文件呢
busyluo
2016-07-11 01:11:06 +08:00
@mbbill 想识别编码,也只能通过这种方法了吧。想绝对准确也不可能。
linux40
2016-07-11 07:27:30 +08:00
选几个字符查找?

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

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

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

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

© 2021 V2EX