如何修复1个字节的UTF-8序列的无效字节1(How to fix Invalid byte 1 o

2019-07-22 07:41发布

我试图从数据库中使用Java方法获取下面的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 <data><name>N</name><value>V</value></data>
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 <data> 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();

数据

<ContactDetails>307896043</ContactDetails>
<ContactName>307896043</ContactName>
<Preferred_Completion_Date>
</Preferred_Completion_Date>
<service_address>A-End Address: 1ST HELIERST HELIERJT2 3XP832THE CABLES 1 POONHA LANEST HELIER JE JT2 3XP</service_address>
<ServiceOrderId>315473043</ServiceOrderId>
<ServiceOrderTypeId>50</ServiceOrderTypeId>
<CustDesiredDate>2013-03-20T18:12:04</CustDesiredDate>
<OrderId>307896043</OrderId>
<CreateWho>csmuser</CreateWho>
<AccountInternalId>20100333</AccountInternalId>
<ServiceInternalId>20766093</ServiceInternalId>
<ServiceInternalIdResets>0</ServiceInternalIdResets>
<Primary_Offer_Name  action='del'>MyMobile Blue &#163;44.99 [12 month term]</Primary_Offer_Name>
<Disc_Reason  action='del'>8</Disc_Reason>
<Sup_Offer  action='del'>80000257</Sup_Offer>
<Service_Type  action='del'>A-01-00</Service_Type>
<Priority  action='del'>4</Priority>
<Account_Number  action='del'>0</Account_Number>
<Offer  action='del'>80000257</Offer>
<msisdn  action='del'>447797142520</msisdn>
<imsi  action='del'>234503184</imsi>
<sim  action='del'>5535</sim>
<ocb9_ARM  action='del'>false</ocb9_ARM>
<port_in_required  action='del'>
</port_in_required>
<ocb9_mob  action='del'>none</ocb9_mob>
<ocb9_mob_BB  action='del'>
</ocb9_mob_BB>
<ocb9_LandLine  action='del'>
</ocb9_LandLine>
<ocb9_LandLine_BB  action='del'>
</ocb9_LandLine_BB>
<Contact_2>
</Contact_2>
<Acc_middle_name>
</Acc_middle_name>
<MarketCode>7</MarketCode>
<Acc_last_name>Port_OUT</Acc_last_name>
<Contact_1>
</Contact_1>
<Acc_first_name>.</Acc_first_name>
<EmaiId>
</EmaiId>

错误

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

我在一些线程这是因为在XML一些特殊字符的读取。 如何解决这个问题?

Answer 1:

如何解决这个问题?

使用正确的字符编码读取数据。 该错误消息意味着你正在试图读取的数据以UTF-8(有意或因为这是对于不指定XML文件的默认编码<?xml version="1.0" encoding="somethingelse"?> )但它实际上是在不同的编码如ISO-8859-1或Windows 1252。

为了能够提醒你应该怎么做我不得不看您目前使用读取XML的代码。



Answer 2:

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


Answer 3:

尝试:

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,只是改变了一个良好的编码部分。



Answer 4:

我得到的XML作为一个字符串,并使用xml.getBytes(),并得到这个错误。 更改为xml.getBytes(Charset.forName( “UTF-8”))为我工作。



Answer 5:

我有这个问题,但该文件是UTF-8,这只是,不知怎的,在人物进来了,这不是在UTF-8编码。 为了解决我做了什么,在这个线程说明,即我验证该文件的问题: 如何检查文件是否是有效的UTF-8?

基本上你运行以下命令:

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

如果有东西是不是UTF-8编码,它会给你的行和行号,这样就可以找到它。



Answer 6:

我碰巧遇到这个问题,因为Ant构建的。

蚂蚁构建了文件和应用filterchain expandproperties它。 在这个文件过滤,我的Windows机器的隐含的默认非UTF-8字符编码用于生成过滤的文件 - 因此字符的字符集之外无法正确映射。

一个解决方案是提供与蚂蚁为UTF-8的明确的环境变量。 在Cygwin的,发射前蚂蚁: export ANT_OPTS="-Dfile.encoding=UTF-8"



Answer 7:

我遇到过同样的问题,我的XML文件的长期调查后,我发现了问题:有几个类似的字符转义« »



Answer 8:

那些像我这样谁知道字符编码原则, 也看到乔尔的文章这是有趣的,因为它包含了错误的字符不管怎样 , 仍然无法弄清楚究竟发生了什么 (扰流警报,我的Mac用户),那么您的解决方案可能是简单如除本地回购和再克隆

因为它是OK运行最后一次这样是没有意义鉴于我们的编译系统从来没有抱怨过它有UTF错误我的代码基础并没有改变....直到我想起我意外拔出我的电脑前几天与IntelliJ IDEA的运行整个事情(的Java / Tomcat的/休眠)

我的Mac做了出色的工作为装作什么都没有发生,我进行了照常营业,但留给底层文件系统不知何故损坏。 白白浪费了一整天试图找出这一个。 我希望它可以帮助别人。



Answer 9:

我在其中具有含在XMHTL页面某些特殊字符的注释行我的JSF应用程序有同样的问题。 当我相比,我的日食之前的版本,它有一个评论,

//Some �  special characters found

删除这些字符和页面加载的罚款。 主要是它关系到XML文件,所以请工作版本进行比较。



Answer 10:

我遇到过同样的问题。 我的问题是它缺少在WebLogic Server中statWeblogic.cmd文件JAVA_OPTION下“-Dfile.encoding = UTF8”的说法。



文章来源: How to fix Invalid byte 1 of 1-byte UTF-8 sequence