首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache做字符集转换吗?

问Apache做字符集转换吗?
EN

Stack Overflow用户
提问于 2014-03-19 18:38:23
回答 2查看 9.1K关注 0票数 1

我使用org.apache.tika.Tika.parseToString()将文档转换为纯文本(即未格式化的文本)文件。我的应用程序可能需要转换不使用Unicode字符集的文档。例如,一些文档可以在Chinese GB2312字符集中编码。如果Tika将输出重新编码到UTF-8中,那就太好了。这将需要Tika引用许多不同字符集和Unicode之间的映射,以便转换字符。

Tika是否将非Unicode字符集文本转换为Unicode作为parseToString()的输出?有很多的字符设置在那里,所以我会印象深刻,如果蒂卡这样做了超过几个字符集。

更新:我能够用一些非拉丁字符(GB2312 (中文)和KOI8-R (俄语))创建几个不同的文件。Tika.parseToString()甚至无法检测到字符集或编码。我在这里打开了一个关于Tika bug跟踪器的问题:https://issues.apache.org/jira/browse/TIKA-1262

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-22 20:14:55

在讨论Apache中的字符集时,需要不同地考虑两种类型的文件。一种是基本上只是纯文本,另一种是更复杂的类型(包括二进制类型)。

对于更复杂的文件,Tika主要使用第三方库,这些库负责返回Java。这样做的确切方式将取决于所讨论的文件格式-有时文件格式将包括编码信息,有时它将固定在它所支持的内容中。无论哪种方式,Tika都会获得Java,并向您返回一个Java字符串。如何选择对输出进行编码取决于您。(特别是对于Windows用户,请检查终端的编码和使用的字体。有很多"Tika编码问题“,实际上是人们没有正确设置输出的默认Java编码,或者没有一个Unicode支持的终端!)

对于纯文本文件,文件中没有编码信息,我们只有一堆字节。在这里,Apache使用许多EncodingDetector实例中的一个来进行检测。它们使用提示、n-图、语言检测等方法,试图根据给定的信息、文件中的字节模式等计算出文件最有可能的编码方式。

EncodingDetector的定义保存在Tika-Core jar中,但大多数实现都保存在Tika-解析器jar中(并由服务加载器方法加载,就像检测器和解析器一样)。主要是在SVN这里。如果您检查那里,您将看到Tika可以检测到的编码的主列表。

最后一件事--编码检测只对文本文件执行,对二进制类型文件不执行。根据调用Tika的方式,您可能需要对其进行调整和/或提供提示,说明它是文本文件,以便触发EncodingDetector逻辑。

票数 5
EN

Stack Overflow用户

发布于 2014-03-20 17:06:56

这个答案实际上来自Tika项目的JIRA用户。https://issues.apache.org/jira/browse/TIKA-1262

结果是,如果您告诉Tika文件扩展名为“.txt”,它将把文件作为纯文本,尝试检测编码,并将其转换为UTF。

一个简单的方法是将一个空元数据对象传递给TikaInputStream.get()。这将填充元数据对象的resourceName字段。然后将这个对象传递给parseToString()。将resourceName字段设置为以.txt结尾的文件名,解析器知道如何将该文件作为纯文本来处理,并将执行编码检测,以尝试了解如何解码该文件。从parseToString()返回的字符串是一个Java 16字符串对象。当写入文件时,您可以看到它是Unicode,并使用UCS字符集。

代码语言:javascript
复制
Tika tika = new Tika();
Metadata metadata = new Metadata();
TikaInputStream reader = TikaInputStream.get(new File(filepath), metadata);
String contents = tika.parseToString(reader, metadata);

到目前为止,这已经适用于使用So 2312/So 18030和KOI8-R的文本文件。这是预期的行为,它是完美的!我不知道其他的字符集/编码能处理什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22515234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档