Invalid byte 3 of 3-byte UTF-8 sequence


遇到這類錯誤,一般都是編碼問題導致,文件編碼、保存時的編碼都要保持一致,如果嘗試了好多次並且確定所有編碼均為UTF-8還報下面的錯誤,

建議將xml文件頂部的encoding="UTF-8"  改為  encoding="GBK"

詳細錯誤:

嚴重: Servlet.service() for servlet ReportServlet threw exception
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 3 of 3-byte UTF-8 sequence.
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:674)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:425)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity(XMLEntityScanner.java:1619)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1657)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:193)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:225)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)

 

 

大概就這樣。

這樣的問題一般都是編碼不一致所致。

 

 

到這里如果還是有問題,那么再推薦一種做法,我是用的這種方式解決的,就是改變讀取方式,在我這里造成前面所有錯誤的根源是我使用了Reader讀取配置文件,那么這里我將Reader換了,原來報錯的代碼片段:

 
         
 1 package com.hedh.Util;
 2 
 3 import java.io.IOException;
 4 import java.io.Reader;
 5 
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 
10 public class MybatisUtils {
11     private final static SqlSessionFactory SQL_SESSION_FACTORY;
12     static{
13         String resource="mybatis-config.xml";
14         Reader reader=null;
15         try{
16             reader = Resources.getResourceAsReader(resource);
17         }catch(IOException e){
18             e.printStackTrace();
19         }
20         SQL_SESSION_FACTORY=new SqlSessionFactoryBuilder().build(reader);
21     }
22     public static SqlSessionFactory getSqlSessionFactory(){
23         return SQL_SESSION_FACTORY;
24     }
25 }

 

 

將代碼中的Reader更換了(注意兩段代碼的14行、16行、20行):

 1 package com.hedh.Util;
 2 
 3 import java.io.IOException;
 4 import java.io.Reader;
 5 
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 
10 public class MybatisUtils {
11     private final static SqlSessionFactory SQL_SESSION_FACTORY;
12     static{
13         String resource="mybatis-config.xml";
14         InputStream in = null;
15         try{
16             in = Resources.class.getResourceAsStream(resource);
17         }catch(IOException e){
18             e.printStackTrace();
19         }
20         SQL_SESSION_FACTORY=new SqlSessionFactoryBuilder().build(in);
21     }
22     public static SqlSessionFactory getSqlSessionFactory(){
23         return SQL_SESSION_FACTORY;
24     }
25 }

這樣子我的錯誤問題是解決了。問題根源我也想的還不是太清楚,好像是讀取方式的問題。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM