【问题标题】:org.xml.sax.SAXParseException; Invalid byte 1 of 1-byte UTF-8 sequenceorg.xml.sax.SAXParseException; 1 字节 UTF-8 序列的无效字节 1
【发布时间】:2018-12-26 03:24:17
【问题描述】:

尝试此代码时出错 错误日志就行了

docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

代码:

public static Object simpleDeserFromXml(InputStream in) {
    DocumentBuilder docBuilder;
    try {
        docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document document = docBuilder.parse(in);

        Element root = document.getDocumentElement();
        Element elemBean = null;
        Map<String, Class<?>> clsIdMap = new HashMap<String, Class<?>>();
        for (Node node = root.getFirstChild(); node != null; node = node.getNextSibling()) {
            if (node instanceof Element) {
                Element elem = (Element) node;
                if ("b".equalsIgnoreCase(elem.getTagName())) {
                    elemBean = elem;
                } else if ("c".equals(elem.getTagName())) {
                    try {
                        String clsName = elem.getAttribute("v");
                        Class<?> cls = null;
                        if ("boolean".equals(clsName)) {
                            cls = boolean.class;
                        } else if ("byte".equals(clsName)) {
                            cls = byte.class;
                        } else if ("short".equals(clsName)) {
                            cls = short.class;
                        } else if ("char".equals(clsName)) {
                            cls = char.class;
                        } else if ("int".equals(clsName)) {
                            cls = int.class;
                        } else if ("long".equals(clsName)) {
                            cls = long.class;
                        } else if ("float".equals(clsName)) {
                            cls = float.class;
                        } else if ("double".equals(clsName)) {
                            cls = double.class;
                        } else {
                            cls = Class.forName(clsName);
                        }
                        clsIdMap.put(elem.getAttribute("id"), cls);
                    } catch (ClassNotFoundException cnfe) {
                        // TODO must process class not found
                        logger.error("", cnfe);
                    }
                }
            }
        }

        if (elemBean != null) {
            return buildBeanFromXml(elemBean, clsIdMap);
        }
    } catch (ParserConfigurationException e) {
        logger.error("", e);
    } catch (SAXException e) {
        logger.error("", e);
    } catch (IOException e) {
        logger.error("", e);
    }

    return null;
}

我读了一些关于这个的帖子,发现 this one 但在这段代码中我无法理解“条件”是什么,所以我可以解决我的问题

InputSource is = new InputSource(new ByteArrayInputStream(cond.getBytes()));

这是我针对这个问题的错误日志:

[Fatal Error] :3293:36: Invalid byte 1 of 1-byte UTF-8 sequence.
[http-nio-8080-exec-3] ERROR - 18 Jul 2018 15:21:50,721:com.integrosys.base.hs.techinfra.model.CasCompareUtil -
org.xml.sax.SAXParseException; lineNumber: 3293; columnNumber: 36; Invalid byte 1 of 1-byte UTF-8 sequence.
        at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
        at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
        at com.integrosys.base.hs.techinfra.model.CasCompareUtil.simpleDeserFromXml(CasCompareUtil.java:1217)

你们能帮帮我吗,谢谢!

【问题讨论】:

    标签: java struts1


    【解决方案1】:

    哦,我找到了解决这个问题的方法 像这样

    Reader reader = new InputStreamReader(in,"UTF-8");
    InputSource is = new InputSource(reader);
    is.setEncoding("UTF-8");
    
    docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document document = docBuilder.parse(is);
    

    有需要的可以参考。谢谢大家!

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2013-12-10
      • 2013-03-10
      相关资源
      最近更新 更多