【问题标题】:How to get file encoding type? [duplicate]如何获取文件编码类型? [复制]
【发布时间】:2012-03-30 20:24:19
【问题描述】:

Java : How to determine the correct charset encoding of a stream

我想获取 pertiquular 文件的文件编码类型运行时。

System.getProperties("file.encoding");

以上代码对所有输入文件显示相同的编码类型。

【问题讨论】:

  • @Marcelo - 可以将其添加为 aswer...
  • 但是上面的代码和API不适用于excel文件。
  • @RakeshPatel 如果您的问题是针对特定于 excel 的,您应该说明并包含一些源代码
  • 没有任何代码。我正在使用 Universalchardet API 示例并测试 excel。
  • MS Excel 文件是二进制文件,我猜?

标签: java


【解决方案1】:

System.getProperty("file.encoding") 返回您的 os 默认编码。您无法从文本文件中读取编码,但您可以在写入文件时显式设置编码,以确保设置正确的编码。

【讨论】:

  • 我想获取每个文件编码类型的运行时。
  • 您只能在运行时“猜测”编码,因为它是在写入文件时设置的。见这里:link
  • getProperties有错别字,应该是getProperty
【解决方案2】:

请参阅 Marcelos 评论 - 您可以使用一些库来猜测文件的编码,但您永远无法确定它,除非您事先知道。任意文本文件中没有“标准”信息来指示已使用哪种编码来编写它。特定的文件格式可能包含编码信息,但这将以某种专有方式,特定于该文件格式。

【讨论】:

  • 好的,我会增加,但建议的库没有得到日文 excel 文件的编码类型。我试过它没有给出 excel 文件的编码类型
【解决方案3】:

"file.encoding" 属性是默认编码,将在您的文本保存到文件时应用。

如果文本不包含某些编码信息(如 xml 文件),则没有标准方法来识别文本编码

我检测纯文本编码的方法如下:

俄语文本可能采用以下编码:cp1251、dos866、unicode、koi-8 对于每个俄语字母,都有与其他字母组合在一起,这些字母在文本中是永远看不到的。例如。在字母 'а' 之后,您将永远不会看到任何“ъ, ы, ь”。

对于每一个字母,我都有这样一组“不可能的字母”。 然后我以每种编码加载文件内容(可能加载的不是全文,而是一些合理的字节块),对于文本,我计算我有多少不可能的组合。获胜者的编码是这个数字最少的。而且,当然,我也将来自字母 diapazone 的字符计算为错误。 文本可能包含错误,因此对于正确的编码,errorCount>0 可能是错误的,但对于合理的文本块,它会非常准确 - 正确的编码总是错误计数最少。

也许你会发现这很有用。

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 2017-06-02
    • 2020-01-25
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多