当前位置: 首页 > 面试题库 >

如何检测非法的UTF-8字节序列以将其替换为java inputstream?

韶宏邈
2023-03-14
问题内容

该文件不在我的控制之下。大多数字节序列是有效的UTF-8,而不是ISO-8859-1(或其他编码)。我想尽我所能提取尽可能多的信息。

该文件包含一些非法字节序列,应将其替换为替换字符。

这不是一件容易的事,它认为它需要有关UTF-8状态机的一些知识。

Oracle有一个我需要做的包装器:
UTF8ValidationFilter
html" target="_blank">javadoc

是否有类似的东西可用(商业或免费软件)?

谢谢-
斯蒂芬

解:

final BufferedInputStream in = new BufferedInputStream(istream);
final CharsetDecoder charsetDecoder = StandardCharsets.UTF_8.newDecoder();
charsetDecoder.onMalformedInput(CodingErrorAction.REPLACE);
charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
final Reader inputReader = new InputStreamReader(in, charsetDecoder);

问题答案:

java.nio.charset.CharsetDecoder可以满足您的需求。此类为字符集解码提供了针对不同类型错误的用户可定义的操作(请参阅onMalformedInput()onUnmappableCharacter())。

CharsetDecoder写入OutputStream,您可以将其写入InputStream使用中java.io.PipedOutputStream,从而有效地创建过滤条件InputStream



 类似资料:
  • 问题内容: 我正在尝试使用Java方法从数据库中获取以下xml,但出现错误 用于解析xml的代码 数据 错误 我读了一些线程,这是因为xml中有一些特殊字符。如何解决这个问题? 问题答案: 如何解决这个问题? 使用正确的字符编码读取数据。错误消息表示您正在尝试以UTF-8格式读取数据(故意或因为这是未指定的XML文件的默认编码),但实际上它采用的是其他编码,例如ISO-8859-1或Windows

  • 问题内容: 我正在尝试将UTF-8中Java编码的字符串转换为ISO-8859-1。例如,在字符串“âabcd”中,“â”在ISO-8859-1中表示为E2。在UTF-8中,它表示为两个字节。C3 A2我相信。当我执行getbytes(encoding),然后使用ISO-8859-1编码的字节创建一个新字符串时,我得到两个不同的字符。â。还有其他方法可以使字符保持一致,即abcd吗? 问题答案:

  • 问题内容: 我有一个包含阿拉伯字符的xml文件。尝试解析文件时,出现异常,MalformedByteSequenceException:2字节UTF-8序列的无效字节2。我使用POI DOM来解析文档。 日志是 该异常仅在Windows Machine中出现,在Linux Machine中不出现。我该如何解决此问题。任何建议都应是可取的。 问题答案: 我已解决问题,方法是使用UTF8格式创建XML

  • 问题内容: 我将承担将数据库从Latin1转换为UTF-8的繁琐而棘手的任务。 在这一点上,我只想检查存储在表中的数据类型,因为这将确定我应使用哪种方法转换数据。 具体来说,我想检查Latin1列中是否有UTF-8字符,什么是最好的方法?如果只影响几行,那么我可以手动修复它。 选项1.执行MySQL转储并使用Perl搜索UTF-8字符吗? 选项2。使用MySQL CHAR_LENGTH查找具有多字

  • 问题内容: 是否有检测字符串字符集的通用方法?我使用IPTC标签,并且没有已知的编码。我需要检测它,然后将其更改为utf-8。 有人可以帮忙吗? 问题答案: 您要使用编码检测器

  • 我正在尝试将<code>字符序列</code>转换为UTF-8编码的<code>字节〔〕 我一直有问题,所以我打算向stackoverflow寻求帮助。我打算写一个Java小提琴来做到这一点: https://www.mycompiler.io/view/3MliN0HgwDD 除了小提琴本身不起作用: 看来< code>java.nio至少需要Java 7 ref。这就是为什么它在Java 16