该文件不在我的控制之下。大多数字节序列是有效的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