gpt4 book ai didi

java - 在 Java 中处理不支持和/或多个字符集的输入

转载 作者:行者123 更新时间:2023-11-29 05:48:02 25 4
gpt4 key购买 nike

我正在编写一个 Java (7 SE) 应用程序来获取各种基于文本的输入,并且担心遇到 JRE 不支持的字符集/编码(例如,这个应用程序将在 Linux 上运行框,但将摄取在每个主要操作系统等上生成的文件)。

首先,如果 InputStreamReader 遇到不受支持的字符集/编码,是否有办法捕获 IOException(或类似异常)?

那么包含多种编码的输入呢?假设我们有 4 种不同类型的输入:

  • 原始 java.lang.String
  • 纯文本(.txt)文件
  • Word (.docx) 文件
  • PDF文件

如果我们在读取这些输入之一时开始遇到多个(但受支持的)字符编码怎么办? JRE 本身会处理这个问题,还是我必须有多个阅读器,每个阅读器都配置了自己的字符集/编码?

在这种情况下,我可以将流式输入“规范化”为单个标准化(最有可能是 UTF-8)集/编码吗?提前致谢。

最佳答案

要回答您的第一个问题,您可以创建一个 CharsetDecoder 并指定您希望在遇到格式错误的输入时发生什么。

CharsetDecoder charsetDecoder = Charset.forName("utf-8").newDecoder();
charsetDecoder.onMalformedInput(myCustomErrorAction);
charsetDecoder.onUnmappableCharacter(myCustomErrorAction);
Reader inputReader = new InputStreamReader(inputStream, charsetDecoder);

至于捕获不支持整个字符集的情况,它看起来像:

if( Charset.isSupported(encodingSpecified)) {
//Normal case
} else {
//Error case
}

不过我不确定多重编码。我认为单个二进制流具有多种编码是非常不寻常的。流必须有一些自定义方式来指示编码更改。您必须一次从流中读取一个字符来查找该指示符。如果遇到它,则必须使用新编码在同一流上创建一个新阅读器。

在所有情况下,在 Java 中,一旦您从字节流转换为字符流,这些字符将在内存中表示而无需任何特定编码,因此除非您保存数据,否则无需规范化退出某个地方。如果您打算稍后将该数据保存回文件,那么我强烈建议您选择一种编码并坚持使用它来存储所有数据。

关于java - 在 Java 中处理不支持和/或多个字符集的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15090113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com