【问题标题】:Invalid byte 2 of 2-byte UTF-8 sequence : How to find the character2字节UTF-8序列的无效字节2:如何找到字符
【发布时间】:2015-06-15 04:51:27
【问题描述】:

我的 Windows 机器上有一个 UTF-8 编码的大文本文件。不知何故,此文件中的一个或多个字符对于 UTF-8 编码无效,给出错误为“2 字节 UTF-8 序列的无效字节 2”。

我使用的是 windows 7,我想找到无效的字符。我想有一个 UNIX 命令可以解决这个问题,但是是否有任何工具或实用程序或正则表达式(不需要编写程序/代码的东西)可以在 windows 中使用。

我可以使用notepad++或PSPAD或类似的文本编辑器,或者如果有任何windows命令,我可以创建一个批处理文件。请提出建议。

【问题讨论】:

  • 您需要使用工具来制作十六进制转储。查看字节并找出它们是否是有效的UTF-8 序列。
  • 谢谢,我尝试查看十六进制格式的文件,但无法快速找出字符。这是一个大文件,我终于找到了导致问题的字符。但是我将来可能会有类似的文件,想知道是否有更聪明的方法可以快速找到无效字符。

标签: java regex utf-8


【解决方案1】:

创建一个 FileReader 以逐字节读取文件。如果当前字节看起来像 2 字节 UTF-8 中的第一个字节,则读取下一个字节,将这两个字节放入 byte[2] 数组中,并将其提供给 new String(array, "UTF-8")。在循环中,对读取的字节数进行计数,并捕获异常以产生位置和字节值。

【讨论】:

  • 感谢您的建议。我主要是在寻找不需要编写代码的解决方案/实用程序。但是如果万一我找不到任何工具,我会通过编写一个小程序来尝试您的建议。
【解决方案2】:

您的 UTF-8 文件上可能有字节顺序标记,Java 阅读器通常无法识别该标记。

在记事本++中打开文件。如果文件有 BOM,Notepad++ 将报告“UTF-8”而不是“UTF-8 w/o BOM”。

您可以在没有 BOM 的情况下转换为 UTF-8,也可以使用类似:https://stackoverflow.com/a/2905038/1554386 来剥离 BOM。

【讨论】:

  • 我的文件在记事本++中打开,编码为“在没有BOM的UTF-8中编码”。
猜你喜欢
  • 2011-01-26
  • 2012-10-16
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多