在Web应用程序服务方法中,我尝试使用VTD-XML解析xml。从数据库中读取后,我调用下面的代码 它无法解析并抛出异常:
UTF 8编码错误:绝不应该发生
相同的代码在main方法的单独类中工作。我正在使用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 :(得分:1)
错误消息表明使用UTF-8编码解析XML字节数组,这是预期的,因为这是推荐的XML编码。
但是,当您在String
上致电getBytes()
时,您会得到(引用javadoc):
使用平台的默认字符集将此
String
编码为字节序列,并将结果存储到新的字节数组中。
由于你的默认charset极不可能是UTF-8,你会得到别的东西,然后解析为UTF-8就会失败。
要解决此问题,请使用getBytes(Charset charset)
,如下所示:
vg.setDoc(xml.getBytes(StandardCharsets.UTF_8));