2016-04-18 4 views
1

Webアプリケーションサービスメソッドでは、VTD-XMLを使用してXMLを解析しようとしています。データベースから読み込んだ後、私は以下のコードを呼び出しています。
解析に失敗し、例外をスローしています:UTF 8エンコーディングエラー:Java例外

UTF 8 encoding error: should never happen

同じコードがメインメソッドで別のクラスで動作しています。私は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

あなたの質問に関連していないが、Class.forNameのを経由してJDBCドライバをロードする[ほぼ10年間、不要となっている(のhttp://ドキュメント.oracle.com/javase/6/docs/api/java/sql/DriverManager.html)。 – VGR

+0

ya ....私はちょうどgetBytes()の問題をテストするためにこれを書いた...通常、私たちはconnプールのみを使用します – user2688323

答えて

1

エラーメッセージは、XMLのバイト配列はそれがXMLの推奨エンコーディングであるためこれは予測すべきものであるUTF-8エンコーディングを使用して解析されていることを示しています。

あなたはStringgetBytes()を呼び出すときしかし、あなたは(Javadocを引用)取得:

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

あなたが文字セットをデフォルト性は極めて低いですので、はUTF-8である、あなたは何かを得るでしょうし、 UTF-8が失敗すると解析されます。

にとして、getBytes(Charset charset)を使用し、それを修正するには:

vg.setDoc(xml.getBytes(StandardCharsets.UTF_8)); 
関連する問題