UTF 8编码错误:应该永远不会发生,java异常

时间:2016-04-18 13:51:11

标签: java encoding utf-8

在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");
}

1 个答案:

答案 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));