java cp1252,如何可靠地猜测MacRoman,CP1252,Latin1,UTF-8和ASCII之间的编码

在工作中似乎没有一周没有一些编码相关的conniption,灾难或灾难 . 这个问题通常来自程序员,他们认为他们可以在不指定编码的情况下可靠地处理“文本”文件 . 但你不能 .

因此,已经决定从此以后禁止文件的名称以 *.txt 或 *.text 结尾 . 我们的想法是,这些扩展误导了偶然程序员对编码的沉闷,这会导致处理不当 . 没有任何扩展几乎会更好,因为至少你知道你不知道你有什么 .

但是,我们并不是那么远 . 相反,您需要使用以编码结尾的文件名 . 因此,对于文本文件,例如,这些将是 README.ascii , README.latin1 , README.utf8 等 .

对于需要特定扩展名的文件,如果可以在文件本身内部指定编码,例如在Perl或Python中,那么您应该这样做 . 对于像Java源这样的文件,文件内部不存在这样的工具,您将把编码放在扩展名之前,例如 SomeClass-utf8.java .

对于输出,UTF-8应为 strongly 首选 .

但是对于输入,我们需要弄清楚如何处理名为 *.txt 的代码库中的数千个文件 . 我们想重命名所有这些以符合我们的新标准 . 但我们不可能全都注意它们 . 所以我们需要一个真正有用的库或程序 .

它们有各种ASCII,ISO-8859-1,UTF-8,Microsoft CP1252或Apple MacRoman . 虽然我们知道我们可以判断某些东西是否为ASCII,并且我们知道某些东西是否可能是UTF-8,但我们对8位编码感到困惑 . 因为我们在混合的Unix环境(Solaris,Linux,Darwin)中运行,大多数桌面都是Mac,所以我们有很多烦人的MacRoman文件 . 而这些尤其是一个问题 .

一段时间以来,我一直在寻找一种方法来以编程方式确定哪一个

ASCII

ISO-8859-1

CP1252

MacRoman

UTF-8

文件在,我还没有找到一个程序或库,可以可靠地区分这三种不同的8位编码 . 我们可能单独拥有超过一千个MacRoman文件,因此我们使用的任何字符集检测器都必须能够嗅出这些文件 . 我没看过任何东西可以解决这个问题 . 我对ICU charset detector library寄予厚望,但它无法处理MacRoman . 我也看过模块在Perl和Python中做同样的事情,但一次又一次它总是同样的故事:不支持检测MacRoman .

我正在寻找的是一个现有的库或程序,它可靠地确定文件所在的五种编码中的哪一种 - 并且最好是更多 . 特别是它必须区分我引用的三个3位编码, especially MacRoman . 这些文件超过99%的英文文本;其他语言中有一些,但并不多 .

如果是库代码,我们的语言首选项是Perl,C,Java或Python,并且按此顺序 . 如果它只是一个程序,那么我们并不关心它是什么语言,只要它是完整的源代码,在Unix上运行,并且完全没有阻碍 .

有没有其他人有这个随机编码的遗留文本文件的问题?如果是这样,你是如何尝试解决它的,你有多成功?这是我的问题中最重要的方面,但我也感兴趣的是你是否认为鼓励程序员用这些文件的实际编码来命名(或重命名)他们的文件将有助于我们避免将来出现这个问题 . 有没有人试图在制度基础上强制执行这个,如果是的话,是否成功,为什么?

是的,我完全理解为什么鉴于问题的性质,人们无法保证给出明确的答案 . 对于没有足够数据可用的小文件尤其如此 . 幸运的是,我们的文件很少 . 除随机 README 文件外,大多数文件的大小范围为50k到250k,而且许多文件的大小更大 . 任何超过几K的东西都保证是英文的 .

问题领域是生物医学文本挖掘,因此我们有时会处理广泛且极大的语料库,就像所有PubMedCentral的Open Access资源库一样 . 一个相当庞大的文件是BioThesaurus 6.0,为5.7千兆字节 . 这个文件特别烦人,因为它几乎都是UTF-8 . 然而,我相信,有些numbskull会在其中插入几行8位编码 - 微软CP1252 . 在你旅行之前需要一段时间 . :(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值