如何修复1字节UTF-8序列的无效字节1

我试图使用java方法从db获取以下xml,但我收到一个错误

用于解析xml的代码

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(new ByteArrayInputStream(cond.getBytes())); Document doc = db.parse(is); Element elem = doc.getDocumentElement(); // here we expect a series of NV NodeList nodes = elem.getElementsByTagName("data"); TableID jobId = new TableID(_processInstanceId); Job myJob = Job.queryByID(_clientContext, jobId, true); if (nodes.getLength() == 0) { log(Level.DEBUG, "No data found on condition XML"); } for (int i = 0; i < nodes.getLength(); i++) { // loop through the  in the XML Element dataTags = (Element) nodes.item(i); String name = getChildTagValue(dataTags, "name"); String value = getChildTagValue(dataTags, "value"); log(Level.INFO, "UserData/Value=" + name + "/" + value); myJob.setBulkUserData(name, value); } myJob.save(); 

数据

 307896043 307896043   A-End Address: 1ST HELIERST HELIERJT2 3XP832THE CABLES 1 POONHA LANEST HELIER JE JT2 3XP 315473043 50 2013-03-20T18:12:04 307896043 csmuser 20100333 20766093 0 MyMobile Blue £44.99 [12 month term] 8 80000257 A-01-00 4 0 80000257 447797142520 234503184 5535 false   none           7 Port_OUT   .   

错误

  org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence. 

我读了一些线程,因为xml中有一些特殊字符。 如何解决这个问题?

如何解决这个问题?

使用正确的字符编码读取数据。 错误消息表示您尝试将数据读取为UTF-8(故意或因为这是未指定的XML文件的默认编码)但它实际上采用的是不同的编码,如ISO-8859-1或Windows-1252。

为了能够就如何执行此操作提供建议,我必须查看您当前用于读取XML的代码。

  1. 在记事本中打开xml
  2. 确保文档的开头和结尾没有多余的空间。
  3. 选择文件 – >另存为
  4. 选择保存类型 – >所有文件
  5. 输入文件名为abcd.xml
  6. 选择编码 – UTF-8 – >单击保存

尝试:

 InputStream inputStream= // Your InputStream from your database. Reader reader = new InputStreamReader(inputStream,"UTF-8"); InputSource is = new InputSource(reader); is.setEncoding("UTF-8"); saxParser.parse(is, handler); 

如果它不是UTF-8,只需更改好的编码部分即可。

我将xml作为String并使用xml.getBytes()并获取此错误。 更改为xml.getBytes(Charset.forName(“UTF-8”))为我工作。

我有这个问题,但文件是UTF-8,只是在某种程度上字符已经进来,没有用UTF-8编码。 为了解决这个问题,我做了这个post中所说的,即我validation了文件: 如何检查文件是否有效UTF-8?

基本上你运行命令:

$ iconv -f UTF-8 your_file -o / dev / null

如果有些东西没有用UTF-8编码,它会给你行号和行号,以便你可以找到它。

我碰巧因为Ant构建而遇到了这个问题。

Ant构建获取文件并应用filterchain expandproperties 。 在此文件筛选期间,我的Windows机器的隐式默认非UTF-8字符编码用于生成筛选文件 – 因此无法正确映射其字符集之外的字符。

一种解决方案是为Ant提供UTF-8的显式环境变量。 在Cygwin中,在启动Ant之前: export ANT_OPTS="-Dfile.encoding=UTF-8"

我遇到了同样的问题,经过长时间调查我的XML文件后,我发现了问题:很少有未转义的字符,如« »

像我这样理解字符编码原理的人, 也阅读了Joel的文章 , 这篇文章很有趣,因为它包含了错误的字符 , 但仍然无法弄清楚是什么 (剧透警报,我是Mac用户)那么你的解决方案就像删除您的本地仓库并再次克隆它

我的代码库自从上次运行以来没有改变,所以由于我们的构建系统从不抱怨它,所以没有任何意义的UTF错误….直到我记得我几天前不小心拔掉了我的电脑使用IntelliJ Idea和整个运行(Java / Tomcat / Hibernate)

我的Mac做了很棒的工作,假装没有发生任何事情,我像往常一样继续经营,但基础文件系统在某种程度上被破坏了。 浪费了一整天试图弄清楚这个。 我希望它对某人有所帮助。