2016-04-18 4 views
1

In der Web-Anwendung Service-Methode, ich versuche, ein XML mit VTD-XML zu analysieren. Nachdem ich es aus der Datenbank gelesen habe, rufe ich den folgenden Code an.
Es ist andernfalls eine Ausnahme zu analysieren und wirft:UTF 8 Codierung Fehler: sollte nie passieren, Java-Ausnahme

UTF 8 encoding error: should never happen

Der gleiche Code wird in main-Methode in separater Klasse arbeiten. Ich benutze NetBeans IDE.

Class.forName("com.mysql.jdbc.Driver"); 
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ebuild_woym_purple_clone1", "root", "root"); 
Statement st = con.createStatement(); 
st.executeQuery("select * from revision where name='First'); 
ResultSet rs = st.getResultSet(); 
if(rs.next()){ 
    String xml = rs.getString(9); 
    System.out.println(xml); 
    vg.setDoc(xml.getBytes()); 
    vg.parse(false); //vtd-xml parser object , throwing exception here 
    System.out.println("good"); 
} 
+0

nicht zu Ihrer Frage, aber einen JDBC-Treiber über Class.forName Laden [hat seit fast zehn Jahren nicht notwendig gewesen] (http: // docs .oracle.com/javase/6/docs/api/java/sql/DriverManager.html). – VGR

+0

ya .... Ich habe dies nur geschrieben, um das Problem getBytes() zu testen ... Normalerweise verwenden wir nur Conn-Pools – user2688323

Antwort

1

Die Fehlermeldung zeigt an, dass der XML-Byte-Array, UTF-8-Codierung verwendet, die geparst zu erwarten ist, da, dass die empfohlene Codierung für XML ist.

Wenn Sie jedoch getBytes() auf einem String rufen Sie (unter Angabe javadoc) erhalten:

Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.

Da es äußerst unwahrscheinlich ist, dass Sie charset Standard ist UTF-8, werden Sie etwas anderes bekommen, und Parsen das als UTF-8 wird dann fehlschlagen.

es zu beheben, verwendet getBytes(Charset charset), wie in:

vg.setDoc(xml.getBytes(StandardCharsets.UTF_8));